所以,我有这样的代码
UIView.animate(withDuration: 2) {
self.navigationController?.navigationBar.isHidden = self.hideNavBar
view.layoutIfNeeded()
// view.setNeedsLayout()
}
但是当我使用view.layoutIfNeeded()
调用这段代码时,主视图的布局子视图函数根本没有被调用
但是,如果我改为调用view.setNeedsLayout()
,则会调用 layoutSubview 函数并更新所有约束。
view.setNeedsLayout
和view.layoutIfNeeded
不应该都调用 layoutSubview 函数吗?只是他们的时机有点不同?
顾名思义,layoutIfNeeded
方法会立即列出,但前提是存在"无效"视图。相反,setNeedsLayout
使视图"无效",但它将在下一个更新周期中布局。
调用(先调用setNeedsLayout
然后调用layoutIfNeeded
(可确保视图无效并立即重新布局。
从文档:
- 设置需求布局
- 布局如果需要