不要随意修改UITabbarController,UINavigationController的布局


昨天碰到一个很郁闷的问题,就是设置了hidesBottomBarWhenPushed = YES;之后,进行push操作后第一次和第二次的显示效果不一样。

下面来具体分析下为什么会导致这个问题。

 

首先我列出我的程序结构

UITabbarController:

+--------UINavigationController:

    +--------ListVC (self.navigationController.view.frame = CGRectMake(0, 0, 320, 480-49);)(其实这句写在这里不合适,我稍后再说)

    +--------DetailVC(hidesBottomBarWhenPushed = YES;)

......

在ListVC中,我设置了:

进行push DetailVC之后,navigationController.view的高度是 480-49。之后pop,再push之后navigationController.view的高度变为 480。这到底是为什么?

我打印了每次push之前的navigationController.view高度都是480-49。这个应该不是问题所在,突然灵光乍现。。。。。
其实hidesBottomBarWhenPushed应该是和tabbarController有关,所以我打印了tabbarController的subviews查看原因。其中有一个

UITransitionView的高度在第一次和第二次的情况下高度分别为480, 480-49。现在我们完全有理由怀疑,由于push的detailVC设置了hidesBottomBarWhenPushed,tabbarController回去将navigationController.view的高度+49和UITransitionView的高度比较,如果大于UITransitionView的高度,则需要重新进行布局。导致UITransitionView修改高度,navigationController.view修改高度,及进行布局。

 

以上都是臆测!!!!!

 

综上,我们不需要随意改变UITabbarController,UINavigationController的视图布局。因为如果我们修改了里面的布局,可能会影响他们对于我们VC的视图布局的管理!!!如果不是有意为之,我们应该尽量让系统写的代码去管理我们VC的视图布局。所以,不要没事就设置self.navigationController.view.frame = CGRectMake(0, 0, 320, 480-49);


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM