指定行数后UILabel SizetoFit?

Posted

技术标签:

【中文标题】指定行数后UILabel SizetoFit?【英文标题】:UILabel SizetoFit After Specifying Number of Lines? 【发布时间】:2018-12-08 18:53:37 【问题描述】:

我想在指定行数后以编程方式创建 UILabel。我正在使用斯威夫特。我有以下代码:

let newLabel = UILabel()
newLabel.text = "Hello There"
newLabel.font = UIFont.systemFont(ofSize: 16)
newLabel.numberOfLines = 2
newLabel.lineBreakMode = .byWordWrapping
newLabel.sizeToFit()
newLabel.frame.origin.x = 100
newLabel.frame.origin.y = 500
view.addSubview(newLabel)

问题是标签的文本在一行,而不是两行。我必须使用 sizeToFit 因为 fontSize 实际上是动态的(它并不总是 16)。如何确保标签是 2 行?谢谢。

【问题讨论】:

所以你总是期望两行?或者您希望文本为“Hello\nThere” 【参考方案1】:

您没有指定您的UILabel 的确切frame。所以您的视图只是获得它想要的任何宽度。您可以使用它来获取结果:

newLabel.frame = CGRect(x: 100, y: 500, width: newLabel.frame.width - 1, height: newLabel.frame.height * 2)

但这不是很好,我建议使用 AutoLayout

【讨论】:

【参考方案2】:

你可以做很多事情来换行。 1)您可以在单词之间使用“\n”。但不确定您的用例以及这是否有意义。 2)认为不建议您可以定义标签的宽度。 3) 使用 numberOfLines = 0,如果你可以去超过 2 行。但是,如果你只想要 2 行,那么给 numberOfLines = 2。

还可以使用类似下面的约束而不是框架:

 private let newLabel: UILabel = 
     let label = UILabel()
     label.translatesAutoresizingMaskIntoConstraints = false
     label.text = "Hello There"
     label.font = UIFont.systemFont(ofSize: 16)
     label.numberOfLines = 0

     return label
   ()

   view.addSubview(newLabel)

   NSLayoutConstraint.activate([
      newLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 500),
      newLabel.leadingAnchor.constraint(equalTo:view.leadingAnchor, constant: 100),
      newLabel.widthAnchor.constraint(equalToConstant: 70)
   ]) 

【讨论】:

以上是关于指定行数后UILabel SizetoFit?的主要内容,如果未能解决你的问题,请参考以下文章

CSS文本超出指定行数后省略号显示

如何防止 sizeToFit 更改 UILabel 宽度?

UILabel 中 sizeToFit 的高度不正确

uilabel sizetofit 不起作用

在带有阴影的 UILabel 上使用 SizeToFit()?

如何以编程方式在 UILabel 上设置 sizeToFit 宽度和高度?