1.新建類別 UILabel+BoundingRect.h #import @interface UILabel (BoundingRect) //初始化的size,,size中高度或者寬度為0 -(CGRect)boundingRectWithInitSize @end UILabel+BoundingRect.m #import "UILabel+BoundingRect.h" @implementation UILabel (BoundingRect) -(CGRect)boundingRectWithInitSize { } @end boundingRect求出的高度總是為0,, 原因沒(méi)有設(shè)置好text font (或者沒(méi)有固定寬度) text font 一定要在boundingRect方法前設(shè)置好 ========== iOS7中用以下方法
- (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代過(guò)時(shí)的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根據(jù)文字 字?jǐn)?shù)動(dòng)態(tài)確定Label寬高 // 設(shè)置Label的字體 HelveticaNeue Courier UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:24.0f]; _nameLabel.font = fnt; // 根據(jù)字體得到NSString的尺寸 CGSize size = [_nameLabel.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil]]; // 名字的H CGFloat nameH = size.height; // 名字的W CGFloat nameW = size.width; _nameLabel.frame = CGRectMake(0, 0, nameW,nameH); iOS7中用以下方法boundingRectWithSize:options:attributes:context:替代過(guò)時(shí)的iOS6中的sizeWithFont:constrainedToSize:lineBreakMode:方法 // 4,根據(jù)正文內(nèi)容多少,動(dòng)態(tài)確定正文content的frame // 寬度W CGFloat contentW = self.bounds.size.width - _content.frame.origin.x - kMargin; // label的字體 HelveticaNeue Courier UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:18.0f]; _content.font = fnt; _content.numberOfLines = 0; _content.lineBreakMode = NSLineBreakByWordWrapping; // iOS7中用以下方法替代過(guò)時(shí)的iOS6中的sizeWithFont:constrainedToSize:lineBreakMode:方法 CGRect tmpRect = [_content.text boundingRectWithSize:CGSizeMake(contentW, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil] context:nil]; // 高度H CGFloat contentH = tmpRect.size.height; NSLog(@"調(diào)整后的顯示寬度:%f,顯示高度:%f"contentW,contentH); _content.frame = CGRectMake(0, 0, contentW,contentH); |
|