我已经查看了几个Stackoverflow问题,其中人们遇到了boundingRectWithSize的问题,但没有一个是我的问题。
以下代码通常会计算1行文本太高的高度。
CGFloat height = [label.attributedText
boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
context:nil].size.height;
例如,字符串地图类型:USGS Topo 大约是我视图宽度的一半,应该是1行高(~18像素),但最终会有2行高(~36像素):
我也尝试使用NSString而不是NSAttributedString计算高度,但同样的事情发生了:
CGFloat height = [[label.attributedText string]
boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:TITLE_FONT}
context:nil].size.height;
您可以在此屏幕截图中看到底部3个标签的最终尺寸正确,但不是前两个。我在iOS模拟器中打开了颜色混合标签,因此子视图将被着色以说明:
答案 0 :(得分:2)
您的字符串中可能有一个尾随换行符。尝试使用whitespaceAndNewlineCharacterSet
修剪它。
答案 1 :(得分:0)
我之前遇到过类似的事情,虽然它没有归因于字符串。当它发生在我身上时,标签的框架还没有完全设置,所以在计算时宽度足够窄,它必须包裹到下一行。在进行此计算时检查标签的框架,并确保它实际上与您认为的一样宽。