美文网首页
ViewDidLoad中视图的尺寸是storyboard中的尺寸

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

作者: Trigger_o | 来源:发表于2018-01-04 15:58 被阅读0次

如果使用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

相关文章

网友评论

      本文标题:ViewDidLoad中视图的尺寸是storyboard中的尺寸

      本文链接:https://www.haomeiwen.com/subject/zrmrnxtx.html

      热点阅读