我创建了一个应用程序,需要在导航栏和其他视图上方有一个栏。为了实现这一点,我使用一个视图控制器,顶部栏的视图,然后是其他一切的容器视图。有时,需要隐藏顶栏。我正在使用autolayout隐藏顶部栏(将其高度设置为0),容器视图展开以填充屏幕(容器顶部等于顶部栏底部)。容器视图包含导航控制器,因为我有时需要顶栏下方的导航栏。当我启动应用程序时,这一切都正常,如下所示:
如您所见,导航栏保持所需的高度,该高度已扩展为包含状态栏
然而,当点击顶部栏时,我使用segue从我的根视图控制器(而不是容器)呈现(不推)视图控制器,然后我用导航栏查看同一个屏幕,导航栏不再展开,它与状态栏重叠,如下所示:
为什么呈现视图控制器会打破这个?然后我怎么能纠正这个或阻止它呢?
我可以做的一个可能的解决方案是从容器视图中提供一个视图控制器,它可以工作,我只需要将容器中的当前视图控制器设置为根控制器的委托,这样当顶部栏点击,它告诉容器中的视图控制器呈现新的视图控制器。然而,这不是我的第一个选择,特别是如果有其他情况导致此问题。
感谢您的帮助!
答案 0 :(得分:2)
您需要为所有子视图控制器关闭automaticallyAdjustsScrollViewInsets
并自行管理插图(或设置以便它们不是必需的)。默认情况下,所有视图控制器都会启用automaticallyAdjustsScrollViewInsets
(这就是您想要的全屏'展示的VC。
目前,当VC层次结构发生变化时,您会看到控制器几乎随机更新以重新组织自己的滚动插入。
我可能会为所有VC(除了root)关闭automaticallyAdjustsScrollViewInsets
并更改标题视图以使其达到全高或状态栏高度(应为{{1}根VC的length
。折叠到状态栏高度时,标题视图也可以更改颜色以匹配当前顶级VC的颜色。