如果我有一个多线字符串,我放入UILabel,
设置相对于视图边界的字体大小,
然后我打电话给sizeToFit
,
所有这些都发生在drawRect:
,
它完美地标注了我的标签。
由于方向更改而再次调用drawRect:
时,
它拧紧了适合的尺寸。
self.bounds.width
比标签在所有情况下都需要的要大得多。
代码:
import UIKit
class CustomView: UIView {
var label = UILabel()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.contentMode = .Redraw
addSubview(label)
}
override func drawRect(rect: CGRect) {
let string = "this is line 1\r\nand\r\nthis is line 3"
label.numberOfLines = 3
label.text = string
label.font = label.font.fontWithSize(self.bounds.width / 30)
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.textAlignment = NSTextAlignment.Center
label.sizeToFit()
label.backgroundColor = UIColor.grayColor()
label.textColor = UIColor.whiteColor()
label.center = self.center
}
}
最初一切看起来都不错:
但是当我的界限由于不同的方向而改变时:
任何想法我在这里做错了什么?顺便说一句,这是不知何故不想增长的宽度。因为如果我设置label.numberOfLines = 0
,它确实增长了,但只是在高度上。
答案 0 :(得分:1)
事实证明,在再次致电frame.size.width
之前,您需要将frame.size.height
的{{1}}和/或UILabel
设置为零,例如:
sizeToFit
或
label.frame.size.width = 0
就像它再次正确调整大小一样,尊重label.frame = CGRectZero
。