多行标签与自动换行

时间:2017-02-01 02:27:45

标签: ios swift label multiline word-wrap

这看起来很直观,但我一直试图让文字停止离开屏幕45分钟。这是我的viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    orgTitle.numberOfLines = 0
    orgTitle.lineBreakMode = .byWordWrapping
    orgTitle.frame.size.width = self.view.frame.size.width - 20
    orgTitle.sizeToFit()

    orgDesc.numberOfLines = 0
    orgDesc.lineBreakMode = .byWordWrapping
    orgDesc.frame.size.width = self.view.frame.size.width - 20
    orgDesc.sizeToFit()

    self.orgTitle.text = self.oTitle
    self.orgDesc.text = self.desc
    self.orgImage.image = self.image
}

我附上了问题的截图以及我的标签设置。 Label Settings Screenshot of issue

1 个答案:

答案 0 :(得分:2)

我发现使用约束来设置布局比使用手动调整框架要容易得多......

但是,无论出于何种原因,如果您想手动设置标签的框架,我建议两件事:

  1. 就像@rmaddy提到的那样,viewDidLoad在视图控制器生命周期中太早,框架才是正确的。尝试覆盖layoutSubviews并将框架调整移动到该方法中。

  2. 对于numberOfLines设置为0的UILabel,您还需要设置标签preferredmaxlayoutwidth属性以帮助它确定需要多少行(如果使用约束则不需要)。

  3. 此外,如果您愿意以iOS9及更高版本为目标,UIStackView是UIKit非常好的补充,以帮助实现这种布局,其中子视图可以从多线标签的潜在增加高度下推。 / p>

    这里有一些屏幕抓取添加堆栈视图来保存2个UILabel,然后将stackview的左,上,右边缘固定到superview上的约束:

    enter image description here

    通过故事板中定义的布局,只需设置标签的实际内容,viewDidLoad变得更加简单:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.orgTitle.text = self.oTitle
        self.orgDesc.text = self.desc
        self.orgImage.image = self.image
    }