UILabel sizeToFit,相对字体大小不起作用

时间:2016-02-24 17:12:50

标签: ios swift uiview uilabel drawrect

如果我有一个多线字符串,我放入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
    }
}

最初一切看起来都不错:

enter image description here

但是当我的界限由于不同的方向而改变时:

enter image description here

任何想法我在这里做错了什么?顺便说一句,这是不知何故不想增长的宽度。因为如果我设置label.numberOfLines = 0,它确实增长了,但只是在高度上。

1 个答案:

答案 0 :(得分:1)

事实证明,在再次致电frame.size.width之前,您需要将frame.size.height的{​​{1}}和/或UILabel设置为零,例如:

sizeToFit

label.frame.size.width = 0

就像它再次正确调整大小一样,尊重label.frame = CGRectZero