mark:
1.iOS - layoutSubviews、drawRect、awakeFromNib和 loadNibNamed解释
摘要:
layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews。
2、addSubview会触发layoutSubviews。
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
4、滚动一个UIScrollView会触发layoutSubviews。
5、旋转Screen会触发父UIView上的layoutSubviews事件。
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
7、直接调用setNeedsLayout。
其中setNeedsLayout,因为如果要动态调一些东西,可能会常用一点。
2.[iOS]通过xib自定义cell的时候在awakeFromNib方法里面修改view的frame无效
摘要:
当自定义cell是从xib创建时,系统会调用awakeFromNib方法,而且这个方法是当所有条件完成,比如建立了outlet,事件等等,是不是也可以假定cell里面的元素位置都初始化完了。而drawRect有一种渲染的效果,当系统发现屏幕分辨率发生变化了,就会执行这个方法把新的位置重新显示在屏幕上。
3.loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的调用时间及用法
摘要:
- loadView
无论XIB还是代码创建都会调用loadView方法。self.view为nil时才会被调用。
> 手工创建视图时,loadView被调用时self.view还为nil。一般在该方法中手工定制view。
> XIB创建视图时,loadView仍会被系统调用、loadView被调用时XIB定制的视图还没创建完成,若是再覆写该方法的话、会将XIB定制的视图覆盖掉。
所以,纯手工定制视图时,一般在该方法中写;
XIB定制视图时、一定不要覆写该方法。
PS:换言之,loadView的作用等同于xib
4.iOS UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释