如何动态更改UILabel的宽度?

时间:2019-11-07 09:40:57

标签: ios swift

所以我想在每次按下按钮时更改UILabel(进度条)的长度

下面是我如何在视图控制器中设置标签

@IBOutlet weak var progressLabel: UILabel!

@IBAction func answerPressed(_ sender: AnyObject) {
  progressBar.frame.size.width = progressBar.frame.size.width + 100
}

但是我继续为progressBar.frame.size.width获取相同的值,是否有用于设置宽度的独特功能?

The yellow bar Does not increase in width after clicking the answerPressed

3 个答案:

答案 0 :(得分:1)

为标签设置约束,如果文本计数增加,它将自动适合文本。

答案 1 :(得分:0)

如果只是在更改宽度之后添加此内容:

progressBar.layoutIfNeeded()

应该可以

答案 2 :(得分:0)

根据您添加视图的方式而有所不同。我添加了一个示例,该示例通过代码无约束地添加了UILabel,并从带有约束的情节提要中添加了UILabel,我还为该UILabel设置了宽度约束,并且也将其限制了:

class ViewController: UIViewController {


    var progressBar: UILabel!

    @IBOutlet weak var progressBarOutlet: UILabel! //From Storyboard
    @IBOutlet weak var progressBarBottomConstraint: NSLayoutConstraint! //Bottom constraint of the progressBarOutlet

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        progressBar = UILabel(frame: CGRect(x: 0, y: 200, width: 10, height: 40))
        progressBar.backgroundColor = .systemPink
        view.addSubview(progressBar)

        let b = UIButton(frame: CGRect(x: 200, y: 500, width: 60, height: 60))
        b.setTitle("Add", for: .normal)
        b.setTitleColor(.blue, for: .normal)
        view.addSubview(b)
        b.addTarget(self, action: #selector(addWidth), for: .touchUpInside)
    }

    @objc func addWidth() {
        progressBar.frame.size.width = progressBar.frame.size.width + 50
        progressBarBottomConstraint.constant = progressBarBottomConstraint.constant + 50
        view.layoutIfNeeded()
    }
}
相关问题