boundingRectWithSize有时会返回高度约为1的线太高
问题描述:
我已经看过几个Stackoverflow问题,其中人们遇到了boundingRectWithSize问题,但没有一个是我的问题。boundingRectWithSize有时会返回高度约为1的线太高
下面的代码通常会计算高度为1行的文本太高。
CGFloat height = [label.attributedText
boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
context:nil].size.height;
例如,串地图类型:USGS地形是我的视图的大约一半的宽度和应为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个唱片公司结束了大小正确地看到,但不是前两名。我在iPhone模拟器开启颜色混合标签,让子视图将着色来说明:
答
您的字符串中可能有一个尾随换行符。尝试用whitespaceAndNewlineCharacterSet
修剪它。
答
我有过类似的事情发生在我身上一段时间以前,虽然这不是用属性串。当它发生在我身上时,标签的框架还没有完全设置,所以在计算时宽度足够窄,不得不缠绕到下一行。在进行此计算时检查标签的框架,并确保其实际上与您认为的一样宽。
不确定是原因,但请注意,最上面的两个字符串包含绘制在基线以下的字符(顶部字符串为'p'和'y',下一个字符为'('和')')而其他三个则没有。 – ravron
@ravron是的,我已经注意到,实际上,但我试图改变基线以下的字符,并有相同的结果。 –
问题是否会以标准字体持续存在?我对字体有问题,这些字体看起来并不明显,这些字体看起来并不明显。 – ravron