【问题标题】:Multiple Line Label with word wrapping带自动换行的多行标签
【发布时间】:2017-06-17 16:16:52
【问题描述】:

这似乎很直观,但我一直试图让文本停止离开屏幕 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
}

我附上了问题的屏幕截图以及我的标签设置。

【问题讨论】:

  • 使用你的调试器。查看viewDidLoad 中的框架大小。现在依赖框架还为时过早。
  • 我不这么认为。那是我最近添加的内容,并没有改变任何东西。我已经删除了它,没有任何改变。

标签: ios swift label multiline word-wrap


【解决方案1】:

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

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

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

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

另外,如果您愿意以 iOS9 及更高版本为目标,UIStackView 是对 UIKit 的一个非常好的补充,可以帮助处理这种布局,其中子视图从可能增加的多行标签高度向下推。

以下是添加堆栈视图以容纳 2 个 UILabel,然后将堆栈视图的左、上和右边缘固定到超级视图的约束的一些屏幕截图:

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

override func viewDidLoad() {
    super.viewDidLoad()

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

【讨论】:

  • 我宁愿不设置框架,这正是我最近尝试的。否则我该怎么做?
  • @EthanKlein 更新了答案,其中包含一些在情节提要中添加堆栈视图和约束的屏幕截图。
  • 我已经完成了堆栈视图的设置,顺便感谢您提供了令人难以置信的深度指南,我只是想知道现在我是否必须返回并更改行号/换行符我的标签的设置?
  • 没关系,我明白了。我刚刚离开了我的线路设置。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
相关资源
最近更新 更多