美文网首页
浅谈layoutIfNeeded,setNeedsLayout的

浅谈layoutIfNeeded,setNeedsLayout的

作者: 小赢一场 | 来源:发表于2018-07-07 11:16 被阅读34次

layoutIfNeeded定义

如果当前布局更新处于等待中,强制刷新当前view所有子view,包括子view的subViews的布局等一直沿着图层树往下传递,重新调整所有子view的frame,如果当前布局没有任何变化,调用该方法会立即返回不做任何处理

setNeedLayout定义

使得当前布局无效,如果当前布局更新处于等待中,则会在下一次循环中触发布局更新

举个例子

  • 当更改view的某个子view的高度的时候添加layoutIfNeeded,约束会立即生效frame会立即改变:


    图1
    添加layoutIfNeeded()
  • 如果去掉layoutIfNeeded,frame并没有立即改变,而是在下次循环中才会变化


    去除layoutIfNeeded()
  • 再例如,有时候我们想获取tableView在reloadData之后的contentSize,但是发现获取的是错误的,获取到的反而是reloadData之前的contentSize,其实也是由于在下一次循环中才会刷新contentSize。如果我们在reloadData之后追加layoutIfNeeded就会强制刷新布局,就能正确获取tableView.contentSize真实大小


    contentSize正确获取方法
  • 动画更新约束,必须在动画更新的block里调用layoutIfneeded才会有动画,否则更新没有动画,立即跳变


    动画更新约束

相关文章

网友评论

      本文标题:浅谈layoutIfNeeded,setNeedsLayout的

      本文链接:https://www.haomeiwen.com/subject/qigiuftx.html