文档章节

iOS7中计算UILabel中字符串的高度

hejunbinlan
 hejunbinlan
发布于 2015/08/27 22:17
字数 656
阅读 66
收藏 1

iOS7中计算UILabel中字符串的高度

iOS7中出现了新的方法计算UILabel中根据给定的Font以及str计算UILabel的frameSize的方法.本人提供category如下:

UILabel+StringFrame.h

复制代码

复制代码

////  UILabel+StringFrame.h//  LabelHeight////  Copyright (c) 2014年 Y.X. All rights reserved.//#import <UIKit/UIKit.h>@interface UILabel (StringFrame)- (CGSize)boundingRectWithSize:(CGSize)size;@end

复制代码

复制代码

UILabel+StringFrame.m

复制代码

按 Ctrl+C 复制代码

//
// UILabel+StringFrame.m
// LabelHeight
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "UILabel+StringFrame.h"

@implementation UILabel (StringFrame)

- (CGSize)boundingRectWithSize:(CGSize)size
{
NSDictionary *attribute = @{NSFontAttributeName: self.font};

CGSize retSize = [self.text boundingRectWithSize:size
options:\
NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size;

return retSize;
}


@end

按 Ctrl+C 复制代码

复制代码

现在来测试代码:

效果图如下:

我们来试验一下使用自定义字体测试一回:

显示结果:

无论自定义字体还是系统字体都是可以完美使用的.

 

以下代码供你测试:

复制代码

复制代码

    // 字符串
    NSString *str = @"日落时分,沏上一杯山茶,听一曲意境空远的《禅》,心神随此天籁,沉溺于玄妙的幻境里。仿佛我就是那穿梭于葳蕤山林中的一只飞鸟,时而盘旋穿梭,时而引吭高歌;仿佛我就是那潺潺流泻于山涧的一汪清泉,涟漪轻盈,浩淼长流;仿佛我就是那竦峙在天地间的一座山峦,伟岸高耸,从容绵延。我不相信佛,只是喜欢玄冥空灵的梵音经贝,与慈悲淡然的佛境禅心,在清欢中,从容幽静,自在安然。一直向往走进青的山,碧的水,体悟山水的绚丽多姿,领略草木的兴衰荣枯,倾听黄天厚土之声,探寻宇宙自然的妙趣。走进了山水,也就走出了喧嚣,给身心以清凉,给精神以沉淀,给灵魂以升华。";    
    // 初始化label
    UILabel *label = [UILabel new];
    label.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:label];    
    // label获取字符串
    label.text = str;    

    // label获取字体
    label.font = [UIFont fontWithName:nil size:18];    
    // 根据获取到的字符串以及字体计算label需要的size
    CGSize size = [label boundingRectWithSize:CGSizeMake(320, 0)];    
    // 设置无限换行
    label.numberOfLines = 0;    
    // 设置label的frame
    label.frame = CGRectMake(0.0f, 50.0f, size.width, size.height);

复制代码

复制代码

 

 

iOS6可以使用如下方式来获取字符串的size值

        size = [text sizeWithFont:font
                  constrainedToSize:size
                       lineBreakMode:NSLineBreakByCharWrapping];

 但此方法已经在iOS7中被废弃了,注意.

 

 

 

//  获取字符串的大小  ios7

 

- (CGSize)getStringRect:(NSString*)aString

{

    CGSize size;

    

    NSAttributedString* atrString = [[NSAttributedStringallocinitWithString:aString];

    

    NSRange range = NSMakeRange(0, atrString.length);

    

    NSDictionary* dic = [atrString attributesAtIndex:0 effectiveRange:&range];

    

    size = [aString boundingRectWithSize:CGSizeMake(237200)  options:NSStringDrawingUsesLineFragmentOriginattributes:diccontext:nil].size;

    

    return  size;

    

}

 

 

//  获取字符串的大小  ios6

- (CGSize)getStringRect_:(NSString*)aString

{

    CGSize size;

    

    UIFont *nameFont=[UIFont fontWithName:@"Helvetica" size:13];

    size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(237200lineBreakMode:NSLineBreakByCharWrapping];

    return  size;

}


本文转载自:http://www.cnblogs.com/shirley-1019/p/3707434.html

hejunbinlan
粉丝 41
博文 595
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
加载中

评论(0)

UILabel自适应高度和自动换行- OC swift

加粗; [UILabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:20]]; 加粗并且倾斜 [UILabel setFont:[UIFont fontWithName:@"Helvetica-BoldOblique" size:20]]; guessLikeLabel.f......

夕阳_jhe
2015/08/17
7.1K
0
UILabel autolayout自动换行 版本区别

今天解决了一个与UILabel相关的Bug。 表现为在iOS7以上的系统中,UILabel能够自动换行,多行显示的字符串,而在iOS6上面则不会自动换行,直接打省略号。 正常情况下,numberOfLines设置为0,U...

Aimy
2014/12/04
1.6K
0
iOS中UITextView的几个小问题

1、ios7中,UITextView有个小bug: 当输入内容到textView底部,这个时候点击键盘上面换行,textView不会随着光标移动下去,在网上查了一下,找到解决方案:(参考:http://stackoverflow.co...

Feng_999
2015/01/23
268
3
iOS小技巧---改变uisearchbar中的cancel按钮的文字、取消clearButton

#pragma mark searchBar开始输入文字时 //汉化取消按钮 - (void)searchBarTextDidBeginEditing:(UISearchBar )searchBar{ searchBar.showsCancelButton = YES; if ([[[UIDevice currentDevi......

夕阳_jhe
2015/04/15
379
0
用UITextView撸一个顺畅的评论输入框

对比UITextField 继承关系: UITextField继承自UIControl,UITextView继承自UIScrollView; 输入行数 UITextView支持多行输入,可以滑屏垂直滚动,UITextField仅支持单行输入 Placeholder UI...

STzen
2018/05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java BigDecimal 如何去掉末尾多余的 0

Java BigDecimal 如何去掉末尾多余的 0 呢? /** * To StripTrailingZeros */ @Test public void bigDecimalStripTrailingZerosTest() { BigDecimal bi......

honeymoose
今天
43
0
齐齐哈尔哪里可以开发票-中国新闻网

齐齐哈尔哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该...

8315581
今天
79
0
衡水哪里可以开发票-中国新闻网

衡水哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种连...

457192
今天
60
0
张家口哪里可以开发票-中国新闻网

张家口哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种...

253878
今天
66
0
黑龙江哪里可以开发票-中国新闻网

黑龙江哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种...

富大范
今天
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部