所以,我有这样的代码
UIView.animate(withDuration: 2) {
self.navigationController?.navigationBar.isHidden = self.hideNavBar
view.layoutIfNeeded()
// view.setNeedsLayout()
}
但是当我使用
view.layoutIfNeeded()
调用此代码时,根本不调用主视图的layoutSubview函数但是,如果我改为调用
view.setNeedsLayout()
,则将调用layoutSubview函数,并且所有约束都将更新。view.setNeedsLayout
和view.layoutIfNeeded
都不应该都调用layoutSubview函数吗?只是他们的时间有些不同? 最佳答案
顾名思义,layoutIfNeeded
方法立即进行布局,但前提是存在“无效”视图。而setNeedsLayout
则使视图“无效”,但是它将在下一个更新周期中布局。
调用(首先setNeedsLayout
然后是layoutIfNeeded
)确保视图无效并立即重新布局。
从文档:
setNeedsLayout
layoutIfNeeded
关于ios - layoutifneeded不会触发layoutSubviews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50852936/