layoutifneeded不会触发layoutSubviews

时间:2018-06-14 08:26:26

标签: ios swift

所以,我有这样的代码

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函数吗?只是他们的时间有点不同?

1 个答案:

答案 0 :(得分:0)

layoutIfNeeded方法,如名称所示,立即列出 ,但前提是"无效"观点。相反,setNeedsLayout"无效"视图,但它将在下一个更新周期中进行布局。

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

来自文档: