代码改变世界

Uilabel自适应文字的大小

2015-03-25 22:54  唐不坏  阅读(268)  评论(0)    收藏  举报

对于iOS7+,

对单行文本数据的显示调用- (CGSize)sizeWithAttributes:(NSDictionary *)attrs;方法来得到文本宽度和高度。

替代过时的- (CGSize)sizeWithFont:(UIFont *)font 方法。

使用方法如下:

CGSize Size=[yourStr sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14]}];
得到uilabel的frame的宽高.

对于多行文本数据的显示调用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context ;方法来得到文本宽度和高度;同时注意在此之前需要设置文本控件的numberOfLines属性为0。

替代过时的sizeWithFont:constrainedToSize:lineBreakMode:方法。

使用方法如下:

uilabel.numberOfLines = 0;
uilabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize textSize=[yourStr 
boundingRectWithSize:CGSizeMake(textWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14]} 
context:nil
].size;

获得文本框的宽高。其中CGSize宽为你设置的uilabel的宽度,高度理论上无限。所以CGSize设置的是对uilabel宽高的限制。