我想弄清楚一根长弦的高度"一二三四有五六七八九十一十一十二十三十四十五十六十六"因为需要适合多线UILabel。问题是我从这个方法得到的结果不正确,即使我等着在layoutSubviews()
内调用这个方法
let rect = label.textRectForBounds(
CGRect(x: 0,y: 0, width: label.bounds.width, height: 10000000.0),
limitedToNumberOfLines: 6)
当我在此行之后设置断点时,我得到:
(lldb) po rect
▿ CGRect
▿ origin : CGPoint
- x : 0.0
- y : 0.0 { ... }
▿ size : CGSize
- width : 374.0
- height : 36.0
那个36.0高度是短路的 - 那个代理单行,我已经将标签高度设置为65.0,这样就会显示两行。显示时,UILabel高三行,文字被切断,因为高度不够大:
我做错了什么?为什么我得不到高度为36.0 * 3 = 108.0的预期结果?
对于它的价值,如果我称之为这种方法,我会得到相同的结果:
let rect = (label.text as NSString!).boundingRectWithSize(
CGSize(width: label.bounds.width, height: 100000000.0),
options: .UsesLineFragmentOrigin,
attributes: [NSFontAttributeName: font],
context: NSStringDrawingContext())
编辑:问题最终导致视图尚未布局,导致UILabel的宽度在上面的计算中不正确。有关详细信息,请参阅最后评论
答案 0 :(得分:1)
有时,当视图是视图层次结构中的子视图时,最好在 viewWillLayoutSubviews()中的超级视图中设置高度/宽度(使用帧或自动布局约束)(或 viewDidLayoutSubviews())。 在执行这些操作之前,视图不具备所需的所有布局数据。