为什么 sizeWithFont:constrainedToSize:lineBreakMode: 返回了错误的尺寸?

5

我有两种可能的宽度,想要在表格单元格中显示一个字符串标签,需要计算高度以便正确记录表格单元格的高度。但是,无论我为限制大小做什么,我得到的高度都是相同的,这在我想要的情况下是不正确的。我正在使用的代码:

CGFloat width = 300.0f;
NSString * value = @"LongText LongText LongText LongText LongText LongText";
CGSize contentSize = [value sizeWithFont: [UIFont systemFontOfSize: 14.0f]
                       constrainedToSize: CGSizeMake(width, CGFLOAT_MAX)
                           lineBreakMode: UILineBreakModeWordWrap];

当我检查contentSize变量时,宽度为252,高度为36,这是预期的结果。但如果将300.0f替换为222.0f放入宽度变量中,则宽度为189,但高度仍为36,只有前4个长文本单词显示在2行上(第三行似乎在计算中被切断了)。有人知道这是为什么吗?

如果您正在使用UITextView,请查看我的答案:https://dev59.com/jHE95IYBdhLWcg3wY8_6#15408198 - domsom
2个回答

3

您的代码看起来没问题。请查看这里这里,看看您的代码是否有任何错误。


谢谢,但这些并没有真正解释为什么该方法在较窄的宽度下表现不正确。 - Kevlar
不,你的代码应该是可以工作的。我以为你会看到他们的代码和你的有什么区别……但我没有看出来。 - mahboudz
2
对的,我只是想知道是否还有其他人意识到苹果代码计算大小的方法不正确,是否有替代方案。 - Kevlar

3

原来返回的尺寸是正确的;我之前使用的代码使用了错误的宽度而不是这个方法中的宽度,这就是为什么文本被截断,并且我感到困惑的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接