首页 > 解决方案 > 多行文本不适合 UILabel

问题描述

我有这个代码:

class ViewController: UIViewController {
    private var nameLabel = UILabel()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        updateLable()
    }

    func updateLable ()  {
        nameLabel = UILabel(frame: view.frame)
        nameLabel.text = "Michael Dell Arron Henry Mitchell duve soooooooooooooooooooooooooc"
        nameLabel.backgroundColor = .green
        nameLabel.numberOfLines = 0
        nameLabel.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(nameLabel)
        NSLayoutConstraint.activate([
            nameLabel.centerXAnchor.constraint(equalTo: self.view.centerXAnchor , constant: 0),
            nameLabel.centerYAnchor.constraint(equalTo: self.view.centerYAnchor , constant: 0)
            
        ])
        
        nameLabel.isHidden = false
        
    }

}

我无法将文本放入标签中。我检查了其他评论,numberOfLines = 0sizeToFit()似乎没有用。

这是它目前的样子:

Label overflows into horizontal sides of screen

标签: swiftuilabelnslayoutconstraint

解决方案


您需要限制标签的宽度以使其包裹。您可以:

1.设置宽度约束

NSLayoutConstraint.activate([
    nameLabel.centerXAnchor.constraint(equalTo: self.view.centerXAnchor , constant: 0),
    nameLabel.centerYAnchor.constraint(equalTo: self.view.centerYAnchor , constant: 0),
    nameLabel.widthAnchor.constraint(equalToConstant: 100) /// here!
])

结果:

带有 7 行的标签,因为它被限制为 100 宽度

2.给superview设置前导和尾随约束

NSLayoutConstraint.activate([
    nameLabel.centerXAnchor.constraint(equalTo: self.view.centerXAnchor , constant: 0), /// you can delete this
    nameLabel.centerYAnchor.constraint(equalTo: self.view.centerYAnchor , constant: 0),
            
    /// here!
    nameLabel.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
    nameLabel.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
])

结果:

带有 2 行的标签,因为它的水平边缘被约束到超级视图


推荐阅读