在我的iOS应用程序中,我的窗口的rootViewController是一个选项卡栏控制器,其层次 struct 如下:
- UITabBarController
- UINavigationController 1
- UINavigationController 2
- UINavigationController 3
- ...
当用户点击FirstContentController
上的某一行时,SecondController
的一个实例将被推到其导航控制器上.SecondContentController
在其init
方法中设置hidesBottomBarWhenPushed
到YES
,在viewWillAppear:
中设置self.navigationController.toolbarHidden
到NO
.
在iOS 6中,用户将点击FirstController
中的行,SecondController
将被推到导航控制器上.因为它设置了hidesBottomBarWhenPushed
,所以它会隐藏选项卡栏,当过渡动画完成时,SecondController
将出现在屏幕上,工具栏可见.
然而,在iOS 7下进行测试时,hidesBottomBarWhenPushed
的行为似乎发生了变化.我现在看到的是:
- 选项卡栏会按预期隐藏
- 工具栏将按预期显示
- 工具栏和内容视图之间会出现一个49像素高(选项卡栏的高度)的不可用空间间隙
这个间隙完全无法使用——它对touch 没有react ,如果我在主视图中将clipsToBounds
设置为"是",则没有任何效果.经过大量调试和判断子视图层次 struct 后,iOS的自动调整大小机制似乎将视图控制器的视图调整到了411的高度(在iPhone 5上).它应该是460才能一直延伸到工具栏,但布局系统似乎包括一个49像素高的"幽灵"选项卡栏.
只有当视图控制器的父容器中有一个选项卡栏控制器时,才会出现此问题.
在iOS 7上,当按下新控制器时,如何让选项卡栏消失,工具栏无缝滑动到位,并且视图仍占据导航项和工具栏之间的整个空间?
UPDATE
经过进一步调查,只有当SecondController的edgesForExtendedLayout
设置为UIRectEdgeNone
时,才会发生这种情况.但是,除非我将该属性设置为UIRectEdgeNone
,否则视图的框架太长,并延伸到工具栏下方,在那里无法看到或与之交互.