最新适应方式
float dev=[[[UIDevice currentDevice]systemVersion]floatValue];
if (dev>=7.0) {
NSDictionary *dict=@{
NSFontAttributeName: [UIFont systemFontOfSize:Size]
};
CGRect frame=[textStr boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine attributes:dict context:nil];
return frame.size.height;
}else{
CGSize size=[textStr sizeWithFont:[UIFont systemFontOfSize:Size] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByCharWrapping];
return size.height;
}
前面已经描述了关于UILabel自适应的要点。其中
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakModeNS_DEPRECATED_IOS(2_0,7_0, "Use -boundingRectWithSize:options:attributes:context:"); 方法在7.0以后已经不建议使用了。
代替方法是:
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);
//第一参数size宽高限制,用于计算文本绘制时占据的矩形块。其中高度根据需要而定。
//第二参数Option文本绘制时的附加选项。
//第三参数attributes为文字属性字典
//第四参数context 例如如何调整字间距以及缩放
//返回一个矩形,大小等于文本绘制完将占据的宽和高。
code:
//自定义一个方法 返回CGSize类型
- (CGSize)repectHeight:(NSString *)sender
{
//NSAttributedString是一个带有属性的字符串,通过该类可以灵活地操作和呈现多种样式的文字数据。
NSAttributedString *attri = [[NSAttributedStringalloc]initWithString:sender];
//计算长度
NSRange range = NSMakeRange(0, attri.length);
//获得文字属性字典
NSDictionary *dic = [attriattributesAtIndex:0effectiveRange:&range];
//计算所需的高度
//300为UILabel的宽度,5000是预设的一个高度,表示在这个范围内
CGSize size = [senderboundingRectWithSize:CGSizeMake(300,5000) options:NSStringDrawingUsesLineFragmentOriginattributes:diccontext:nil].size;// 用于计算文本绘制时占据的矩形块
return size;//返回size 注意这里计算出得仅仅是UILabel所需要高度,如果在Cell里 必须加上其他控件的高度
}