在我的iOS应用程序中,我的窗口的rootViewController是一个标签栏控制器,其层次结构如下所示: 的UITabBarController UINavigationController 1 FirstContentController UINavigationController 2 … UINavigationController 3 … … 当用户点击FirstContentController上的某一行时, SecondController一个实例将被推送到其导航控制器上。 SecondContentController在其init方法中设置hidesBottomBarWhenPushed为YES ,并在viewWillAppear: self.navigationController.toolbarHidden设置为NO 。 在iOS 6中,用户将点击FirstController的行,并将SecondController推到导航控制器上。 因为它具有隐藏的hidesBottomBarWhenPushed设置,它会隐藏标签栏,并且,当过渡animation完成时, SecondController将在其工具栏可见的屏幕上。 但是,在iOS 7下testing时, hidesBottomBarWhenPushed的行为似乎已经改变了。 我现在看到的是: 如预期的那样标签栏隐藏 按预期方式出现工具栏 在工具栏和内容视图之间会出现一个高度为49像素(标签栏高度)的不可用空间 差距是完全无法使用的 – 它不响应触摸,如果我在主视图上设置clipsToBounds为YES,则没有任何绘制。 经过大量debugging和检查子视图层次结构后,iOS的自动调整机制将视图控制器视图的大小调整为411(在iPhone 5上)。 应该是460,直到工具栏,但布局系统似乎包括一个“鬼”49像素高的标签栏。 如果视图控制器有一个标签栏控制器作为一个,如果其父容器只会发生此问题。 在iOS 7上,如何在新控制器被按下时将标签栏消失,并且工具栏无缝滑入到位,并且仍然占用导航项和工具栏之间的整个空间? UPDATE 经过进一步调查,只有当SecondController的edgesForExtendedLayout设置为UIRectEdgeNone才会发生这种情况。 但是,除非将该属性设置为UIRectEdgeNone ,否则该视图的框架太长,并且在工具栏下面延伸,无法看到或与之交互。