iOS viewDidLoad 和viewWillAppear
2019-11-19 本文已影响0人
包砸豆沙馅
-
问题: 这几天在做一个简单的列表页面, 表头配置banner. HeaderView是从nib中读取的, 我在viewDidLoad的时候 去读取HeaderView 然后将banner设置为HeaderView的子视图, 然后去配置Banner的CollectionViewFlayout(配置ItemSize, ItemSize跟self.view的宽度有关). 程序跑起来的时候才发现, 显示出来的banner大小跟self.view的大小完全没有关系.
viewDidLoad中配置flayout
viewDidLoad中配置flayout -
原因:在viewDidLoad的时候, 子视图还没有完全的layout, 还没有调用viewWillLayoutSubview和viewDidLayoutSubview方法, 以至于在viewDidLoad的时候, self.view的大小, 是在nib中画布的大小, 所以从nib中直接读取之后 加在tableView的 headerView上面 就会出现错乱.
-
解决: 在viewDidLoad中 只进行视图的加载, 初始化, 不要进行有关frame的计算. 将frame的计算相关方法 放在viewWillAppear 或者 viewDidAppear中进行. 在viewWillAppear方法中可以进行显示的控制, 只用在第一次appear的时候 进行layout的配置, 以免多次计算frame 浪费性能或者出现其他不必要的bug.
配置好 正常的显示