美文网首页
3 UIView 涉及到的几个layout的方法

3 UIView 涉及到的几个layout的方法

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-13 02:23 被阅读0次

    下面列举下iOS layout的相关方法:

    layoutSubviews

    layoutIfNeeded

    setNeedsLayout

    setNeedsDisplay

    drawRect

    sizeThatFits

    sizeToFit

    首先layoutSubviews什么时候会被调用,所有涉及到视图以及其子视图frame变化的情况都会调用layoutSubviews,比如initWithFrame,setFrame,滚动一个ScrollView,旋转Screen,添加视图addSubView也会触发。

    -setNeedsLayout方法:标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,在系统runloop的下一个周期自动调用layoutSubview

    -layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局 所以你经常会看见下边两个方法连续调用的情况,setNeedsLayout是做标记,layoutIfNeeded是立即刷新视图layout,即调用layoutSubviews方法。

        [self setNeedsLayout];

        [self layoutIfNeeded];

    但是有时候你会发现只单独调用 [selflayoutIfNeeded];了也立即刷新了,比如修改约束的constant属性, 那是因为当这样的约束被更新时,它会自动执行相当于setNeedsLayout的操作

    有时候我们希望在点击某个按钮时某些约束实现动画,某些不实现动画,该如何实现?

    在不希望实现动画的下面先调用一次layoutIfNeeded,让这些不想实现动画的代码先去执行,然后在希望执行动画的后边再在对应的animate方法中调用layoutIfneeded

    -setNeedsDisplay方法:标记为需要重绘,异步调用drawRect

    layoutSubviews方法调用先于drawRect,因为你要先把布局设置好才能开始画

    sizeToFit会自动调用sizeThatFits方法;

    sizeToFit不应该在子类中被重写,应该重写sizeThatFits

    sizeThatFits传入的参数是receiver当前的size,返回一个适合的size

    sizeToFit可以被手动直接调用sizeToFit和sizeThatFits方法都没有递归,对subviews也不负责,只负责自己

    前三个一般做动画会经常用到,这里有个swift的动画demo,可以看看

    相关文章

      网友评论

          本文标题:3 UIView 涉及到的几个layout的方法

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