layoutSubviews何时调用
- alloc init 之后 不会调用,必须调用
addSubview:
方法之后才会调用 - frame 或者 size 前后设置不一样,会调用
- 通过
addSubview:
方法添加子视图之后会调用 - 子视图的frame 改变的时候会调用
- 当屏幕旋转时会调用该方法
- 此方法不应该被直接调用,如果需要强制更新布局,那么应该在下一图形更新之前 设置
setNeedsLayout
,
如果要立即更新布局应该调用setNeedsLayout
,layoutIfNeeded
什么情况下,子类需要重写该方法
子类应该根据需要重写此方法,以便对其子视图执行更精确的布局。仅当子视图的自动调整和基于约束的行为无法提供所需的行为时,才会重写此方法。
在该方法中可以重新对子控件进行布局,但是不应该初始化子控件,在该方法中能获取到子控件以及自身的frame(当你使用约束布局的时候)
当你在init 方法中 创建了子视图后,如果需要另外设置子视图的frame,那么就可以实现该方法,如果你想要在init的同时布局子视图,并且之后子视图的frame 不受其他因素影响(一般用约束不会),那么就不用实现此方法。
sizeToFit
-
sizeToFit
会自动调用sizeThatFits
方法 - 不应该重写
sizeToFit
方法,应该重写sizeThatFits
方法 -
sizeThatFits
接收的size 是reciver 当前的size,返回的是一个合适的size -
sizeToFit
,sizeThatFits
方法没有递归,对subviews 不负责,只对自己负责
drawRect
- 是对recevier 的重绘,能获得context
-
setNeedDisplay
标上一个需要被重绘的标记,在下一个draw 周期到来时自动重绘,iPhone的刷新频率是 60hz,1/60s每次
网友评论