无法使用的UIVIew|iOS Swift进行更新



我正在关注Angela的ios11应用程序开发训练营。我在更新UIView的宽度时遇到问题。这是我正在使用的代码

@IBOutlet var progressBar: UIView!
progressBar.frame.size.width = (view.frame.size.width / 13) * CGFloat(questionNumber + 1)

宽度设置正确,但UI未更新。我已经搜索并找到了以下解决方案。

@IBOutlet weak var progressBarWidthConstraint: NSLayoutConstraint!
progressBarWidthConstraint.constant = (view.frame.size.width / 13) * CGFloat(questionNumber + 1)

为什么下面的代码工作,上面的代码不工作。我正在观看这个讲座链接

提前谢谢。

viewDidload中,它将采用故事板中给定的视图的初始宽度。

我们可以在viewDidAppear中设置宽度

设置宽度后,在viewDidLoad中添加view.setNeedsLayout() Or view.layoutIfNeeded()

如果您想重新绘制视图,只需要调用layoutIfNeeded

使用此方法可以强制视图立即更新其布局。使用"自动布局"时,布局引擎会根据需要更新视图的位置,以满足约束中的更改。使用接收消息的视图作为根视图,此方法从根开始布置视图子树。如果没有挂起的布局更新,则此方法将退出,而不修改布局或调用任何与布局相关的回调。