layoutIfNeeded定义
如果当前布局更新处于等待中,强制刷新当前view所有子view,包括子view的subViews的布局等一直沿着图层树往下传递,重新调整所有子view的frame,如果当前布局没有任何变化,调用该方法会立即返回不做任何处理
setNeedLayout定义
使得当前布局无效,如果当前布局更新处于等待中,则会在下一次循环中触发布局更新
举个例子
当更改view的某个子view的高度的时候添加layoutIfNeeded,约束会立即生效frame会立即改变:
如果去掉layoutIfNeeded,frame并没有立即改变,而是在下次循环中才会变化
再例如,有时候我们想获取tableView在reloadData之后的contentSize,但是发现获取的是错误的,获取到的反而是reloadData之前的contentSize,其实也是由于在下一次循环中才会刷新contentSize。如果我们在reloadData之后追加layoutIfNeeded就会强制刷新布局,就能正确获取tableView.contentSize真实大小
动画更新约束,必须在动画更新的block里调用layoutIfneeded才会有动画,否则更新没有动画,立即跳变