昨天碰到一个很郁闷的问题,就是设置了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);