关于boundingRectWithSize计算label宽高的值不准确的问题

在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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容