所以,我有这样的代码

UIView.animate(withDuration: 2) {
    self.navigationController?.navigationBar.isHidden = self.hideNavBar
    view.layoutIfNeeded()
//    view.setNeedsLayout()
}


但是当我使用view.layoutIfNeeded()调用此代码时,根本不调用主视图的layoutSubview函数

但是,如果我改为调用view.setNeedsLayout(),则将调用layoutSubview函数,并且所有约束都将更新。

view.setNeedsLayoutview.layoutIfNeeded都不应该都调用layoutSubview函数吗?只是他们的时间有些不同?

最佳答案

顾名思义,layoutIfNeeded方法立即进行布局,但前提是存在“无效”视图。而setNeedsLayout则使视图“无效”,但是它将在下一个更新周期中布局。

调用(首先setNeedsLayout然后是layoutIfNeeded)确保视图无效并立即重新布局。

从文档:


setNeedsLayout
layoutIfNeeded

关于ios - layoutifneeded不会触发layoutSubviews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50852936/

10-09 09:14