【问题标题】:In a container view, a navigation controller's navigation bar not resizing to include status bar在容器视图中,导航控制器的导航栏未调整大小以包含状态栏
【发布时间】:2016-05-20 10:57:08
【问题描述】:

我创建了一个应用程序,它需要在导航栏和其他视图上方有一个栏。为了实现这一点,我使用了一个视图控制器,顶部栏有一个视图,然后是其他所有内容的容器视图。有时,需要隐藏顶部栏。我正在使用自动布局隐藏顶栏(将其高度设置为 0),并且容器视图扩展以填充屏幕(容器顶部等于顶栏底部)。容器视图包含一个导航控制器,因为有时我需要顶部栏下方的导航栏。当我启动应用程序时,一切正常,如下所示:

如您所见,导航栏保持所需的高度,该高度已扩展为包括状态栏

但是,当点击顶部栏时,我使用 segue 从我的根视图控制器(而不是容器)呈现(而不是推送)视图控制器,然后我查看与导航栏相同的屏幕,导航栏不再扩展,它与状态栏重叠,如下所示:

为什么展示视图控制器会破坏这一点?那么我该如何纠正或防止它呢?

我可以做的一个可能的解决方案是从容器视图中显示一个视图控制器,这很有效,我只需将容器中的当前视图控制器设置为根控制器的委托,这样当顶部栏被点击,它告诉容器中的视图控制器呈现新的视图控制器。然而,这不是我的第一选择,尤其是在其他情况下会导致此问题。

感谢您的帮助!

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar uicontainerview


    【解决方案1】:

    您需要为您的所有子视图控制器关闭automaticallyAdjustsScrollViewInsets 并自己管理插入(或设置它们不是必需的)。默认情况下,automaticallyAdjustsScrollViewInsets 对所有视图控制器都是打开的(这是您想要的“全屏”呈现的 VC。

    目前,您看到控制器几乎随机更新,以便随着 VC 层次结构的变化为滚动插图重新组织自己。

    我可能会为所有 VC(除了根)关闭 automaticallyAdjustsScrollViewInsets 并更改您的标题视图,使其成为全高或状态栏高度(应该是根的 topLayoutGuidelength VC)。当折叠到状态栏高度时,您的标题视图也可以更改颜色以匹配当前顶部 VC 的颜色。

    【讨论】:

    • 问题 1:当显示标题视图和导航栏时,导航栏只有 44 点,即使在技术上它没有被状态栏覆盖,有没有办法让它变成 64 点?
    • 问题 2:如果初始视图控制器是带有容器和标题的视图控制器,您建议如何跟踪标题的颜色,以便根据我所在的视图控制器,我可以从任何视图控制器更改其颜色?
    • 1 你需要子类化,不是那么容易... 2 你可以实现导航控制器委托
    • 好的,我通过使用自动布局在标题视图和容器视图之间添加 20 点的间隙解决了状态栏问题。然后,我将背景设置为容器视图背景的颜色,或者容器视图的导航栏。
    • 酷。如果他们有帮助,请不要忘记投票和标记答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2018-01-19
    相关资源
    最近更新 更多