NSAttributedString高度计算问题

前言:对于文本的高度计算通常我们会使用NSString的- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullableNSDictionary *)attributes context:(nullableNSStringDrawingContext *)context方法,设置约束的size,并把对应的计算属性赋值给attributes正常情况下就会到我们所需要的实际文本高度,但是也有例外当我们设置NSMutableParagraphStyle为lineBreakMode的是要值得注意。

问题场景接到的需求是限制两行文本显示,如果文本内容过长,结尾要用省略号标志。接到这个需求以后,简单粗暴的设置了NSAttributedString的attributes,然后用对应的attributes去计算文本高度,发现计算出来的总是一行的高度。

原因:原因就是设置了NSMutableParagraphStyle的lineBreakMode为NSLineBreakByTruncatingTail 、NSLineBreakByTruncatingHead 、NSLineBreakByTruncatingMiddle时计算的文本高度为单行文本高度。

解决方法:实际计算时我们应该用NSLineBreakByWordWrapping来计算文本的实际高度,然后显示时用NSLineBreakByTruncatingTail即可

你可能感兴趣的:(NSAttributedString高度计算问题)