iOS storyboard 修改frame问题

在iOS项目中使用storyboard 布局界面,如果启用了AutoLayout, sizeClass 在viewDidLoad修改frame值是看不到效果的(iOS7以前好像可以)

这与iOS的生命周期有关

- (void)awakeFromNib;

- (void)viewDidLoad;

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewDidLayoutSubviews;


awakeFromNib 在创建ViewController之前调用

viewDidLoad 此时ViewController已经创建完成,这里可以做一些配置,view的bounds属性还没有值,所以在这里修改frame看不到效果

viewWillAppear 这里bounds已经有值了,这里不能做一些耗时操作,否则会引起app崩溃

viewDidAppear 这视图已经可见了


答案就是在 viewDidLayoutSubviews 方法中修改frame 可以达到预期效果

这个方法调用在viewWillAppear , viewDidAppear之间,因为frame值的修改必须在bounds有值的情况下才有效


所以修改frame不能在viewDidLoad中


你可能感兴趣的:(iOS(原创),ios)