layoutSubviews setNeedsLayout 和layoutIfNeeded

layoutSubviews

系统方法,不能主动调用,重写父类此方法

自己通常的用法是在自定义view中或者自定义cell中,重写父类的方法,来对它的子view进行位置、大小的设置。

layoutSubviews在以下情况下会被调用:

1、init初始化不会触发layoutSubviews

但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发

2、addSubview会触发layoutSubviews

3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发父UIView上的layoutSubviews事件

6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

You should not call this method directly. If you want to force a layout update, call the setNeedsLayout method instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call the layoutIfNeeded method.

setNeedsLayout  标记为需要重新布局,在下一个绘画周期时,会自动调用layoutSubviews,进行重新布局。

layoutIfNeeded  如果有需要重新布局的标记,就立即自动调用layoutSubviews,进行布局。如果没有标记,不会调用layoutSubviews。

如果想要立即重新布局,可以先调用setNeedsLayout,设置标记,然后调用layoutIfNeeded,进行自动触发layoutSubviews,进行布局。

你可能感兴趣的:(layoutSubviews setNeedsLayout 和layoutIfNeeded)