在UITableView中,可能每一行的cell显示的内容都不一样,在宽度固定的情况,就需要根据要显示的文字来计算实际需要的高度。
这时就需要用到系统函数- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary*)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
这个方法是iOS7.0以后的新API,在之前使用的是- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode NS_DEPRECATED_IOS(2_0, 7_0, "Use -boundingRectWithSize:options:attributes:context:") __TVOS_PROHIBITED;
在使用这个函数去计算的时候返回的高度会出现不准确的现象。后来发现是因为- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary*)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);没有设置lineBreakMode导致,写下来备忘。
代码如下:
_showLabel.text = str;
_showLabel.lineBreakMode=NSLineBreakByWordWrapping;//计算结果不准确是因为没有设置这一行
//看到评论后,才发现计算结果不准确不是因为这个原因,是因为计算时使用的字体大小和实际lb使用的大小不一致造成的,感谢网友的指正。原本写下这些只是为了做个备忘记录,没成想给大家造成了误导,在此说声抱歉。
_showLabel.font = [UIFont systemFontOfSize:16.0];//新加一行
CGSize size = CGSizeMake(_showLabel.frame.size.width, 5000);
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:16.0]};
CGSize retSize = [_showLabel.text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
网友评论