ViewDidLoad中视图的尺寸是storyboard中的尺寸

如果使用storyboard加载vc,在ViewDidLoad中,视图(包括vc的view)都是storyboard中的尺寸,在vc调用viewDidLayoutSubviews之后,才会重新渲染成正确的尺寸

测试一下

//在viewDidLoad中

- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"viewDidLoad%@----%@-----%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.tableView.bounds),NSStringFromCGRect(self.tableView.frame));

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

      NSLog(@"dispatch_after%@----%@-----%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.tableView.bounds),NSStringFromCGRect(self.tableView.frame));

    });

}

//在awakeFromNib中

- (void)awakeFromNib

{

    [super awakeFromNib];

    NSLog(@"awakeFromNib%@----%@-----%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.tableView.bounds),NSStringFromCGRect(self.tableView.frame));

}

//在viewWillAppear中

-(void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];

    NSLog(@"viewWillAppear%@----%@-----%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.tableView.bounds),NSStringFromCGRect(self.tableView.frame));

}

//在viewDidAppear中

-(void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    NSLog(@"viewDidAppear%@----%@-----%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.tableView.bounds),NSStringFromCGRect(self.tableView.frame));

}

//在viewDidLayoutSubviews中

-(void)viewDidLayoutSubviews

{

    [super viewDidLayoutSubviews];

    NSLog(@"viewDidLayoutSubviews%@----%@-----%@",NSStringFromCGRect(self.view.frame),NSStringFromCGRect(self.tableView.bounds),NSStringFromCGRect(self.tableView.frame));

}



最后的输出结果

[15:24:15] -[TNoticeListVC viewDidLoad] [第36行] viewDidLoad{{0, 0}, {414, 736}}----{{0, 0}, {375, 667}}-----{{0, 0}, {375, 667}}

[15:24:15] -[TNoticeListVC awakeFromNib] [第56行] awakeFromNib{{0, 0}, {414, 736}}----{{0, 0}, {375, 667}}-----{{0, 0}, {375, 667}}

[15:24:15] -[TNoticeListVC viewWillAppear:] [第62行] viewWillAppear{{0, 0}, {414, 736}}----{{0, 0}, {375, 667}}-----{{0, 0}, {375, 667}}

[15:24:15] -[TNoticeListVC viewDidLayoutSubviews] [第74行] viewDidLayoutSubviews{{0, 0}, {414, 736}}----{{0, -64}, {414, 736}}-----{{0, 0}, {414, 736}}

[15:24:15] -[TNoticeListVC viewDidAppear:] [第68行] viewDidAppear{{0, 0}, {414, 736}}----{{0, -64}, {414, 736}}-----{{0, 0}, {414, 736}}

[15:24:15] -[TNoticeListVC viewDidLayoutSubviews] [第74行] viewDidLayoutSubviews{{0, 0}, {414, 736}}----{{0, -64}, {414, 736}}-----{{0, 0}, {414, 736}}

[15:24:15] -[TNoticeListVC viewDidLoad]_block_invoke [第49行] dispatch_after{{0, 0}, {414, 736}}----{{0, -64}, {414, 736}}-----{{0, 0}, {414, 736}}

可以看出顺序是viewDidLoad->awakeFromNib->viewWillAppear->viewDidLayoutSubviews->viewDidAppear->dispatch_after(1秒)

这不是重点,顺序众所周知,重点是viewDidLayoutSubviews的调用发生在viewWillAppear之后,如果在viewDidAppear中去写ui的渲染,会产生严重的延迟效果,所以能用autolayout的一定还是使用autolayout

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容