Swift 3 UILabel,更改文本后如何自动换行

时间:2017-03-28 22:02:50

标签: ios swift3 uilabel

我有一个UILabel,它是以编程方式创建的,并希望在创建后动态设置它。我可以在init期间自己封装它,但不能随后。更改标题标签文本后,它会保留一行,无论我是否将行数设置为2或0以及是否自动换行。我改变标题后,我希望它占据2行,文本很容易长到足以让它发生,但事实并非如此。

let titleLabel: UILabel = {
    let label = UILabel()
    label.textAlignment = .center
    label.translatesAutoresizingMaskIntoConstraints = false
    label.backgroundColor = .clear
    label.layer.masksToBounds = true
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.byWordWrapping
    label.textColor = .white
    return label
}()

var titleLabelText: String? {
    didSet {
        titleLabel.text = titleLabelText
        titleLabel.layoutIfNeeded()
    }
}

然后......

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

        titleLabelText = "some string which needs word wrapping"

}
    titleLabel.heightAnchor.constraint(equalToConstant: 40.0).isActive = true
    titleLabel.widthAnchor.constraint(equalToConstant: screenWidth - 90).isActive = true

字体大小为UIFont(name: "Muli", size: 12) 以下是我在viewDidLoad()中加载标签的方法,但label.text已应用于viewDidAppear()

let headerStackView: UIStackView = {
  let headerArray = [welcomeLabel]
  let stackView = UIStackView(arrangedSubviews: headerArray)

4 个答案:

答案 0 :(得分:1)

当您将标签设置为显示多行时。请记住您的标签必须具有足够的高度,以使文本显示多行。

尝试增加标签的高度,检查宽度是否正确,然后检查代码。

答案 1 :(得分:0)

如果文字增加会减少字体大小,它会自动在标签中显示完整的文字。

并将标签行空间设置为0并允许自动换行属性为true

答案 2 :(得分:0)

select your label and try this one

选择你的标签并尝试这个

答案 3 :(得分:-2)

AFAIK您需要将其添加为attributedText,然后使用您的字符串和属性创建NSAttributedString。

    let paragraphStyleWithWordWrapping = NSMutableParagraphStyle()
    paragraphStyleWithWordWrapping.lineBreakMode = .byWordWrapping
    let attributedString = NSAttributedString(myString, [NSParagraphStyleAttributeName: paragraphStyleWithWordWrapping])
     label.attributedText = attributedString