美文网首页
layoutIfNeeded和setNeedsLayout区别

layoutIfNeeded和setNeedsLayout区别

作者: 可乐小子 | 来源:发表于2022-11-10 13:45 被阅读0次

    layoutIfNeeded方法一被调用,主线程会立即强制重新布局,它会从当前视图开始,一直到完成所有子视图的布局
    layoutSubViews用来自定义视图尺寸,他是系统自动调用的,开发者不能手动调用,可以重写改方法,让系统在调整布局时候按照我们希望的方式进行布局.这个方法在旋转屏幕,滑动或者触摸屏幕,修改子视图时候被触发.
    setNeedsLayout 和layoutIfNeeded相似,唯一不同的是他不会立即强制视图重新布局,而是在下一个布局周期才会触发更新.他主要用于多个视图布局先后更新的场景;
    其他

    layoutSubview调用情况:

    addSubview会触发调用
    改变view的width和height的时候会触发调用
    一个UIScrollView滚动会触发调用
    旋转screen会触发调用
    改变一个UIView大小的时候会触发superView的layoutSubviews事件
    直接调用setLayoutSubviews会触发调用
    -(void)viewWillAppear:(BOOL)animated会触发一次调用
    -(void)viewDidAppear:(BOOL)animated 看情况,可能有调用
    注意:init初始化UIView的时候不会触发调用
    drawRect调用情况

    如果UIView没有设置frame大小,直接导致drawRect不能被自动调用。
    drawRect在loadView和viewDidLoad这两个方法之后调用
    调用sizeToFit后自动调用drawRect
    通过设置contentMode值为UIViewContentModeRedraw。那么每次设置或者更改frame自动调用drawRect。
    直接调用setNeedsDisplay或者setNeedsDisplayInRect会触发调用

    ——————————————————————————————————————————————
    PS:layoutIfNeed 则是需要父视图设置,才可以立马刷新布局获取子控件的frame

    相关文章

      网友评论

          本文标题:layoutIfNeeded和setNeedsLayout区别

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