【问题标题】:Making a nav controller work the same in iOS 6 and iOS 7使导航控制器在 iOS 6 和 iOS 7 中的工作方式相同
【发布时间】:2013-10-06 23:28:57
【问题描述】:

如何在 iOS 6 和 iOS 7 中通过故事板使用 UIContainerView 支持导航栏?

我正在将 iOS 6 应用程序更新到 iOS 7,但希望继续支持 iOS 6。我有一个嵌入在 UINavigationController 中的主顶层视图。导航控制器中的视图中有一个容器视图。我正在使用情节提要来布置视图。

在 iOS 7 上,导航控制器使用整个屏幕,我已将其设置为将容器视图内容放在导航栏下方。在 iOS 6 中,视图的内容不在导航栏下方,因此导航栏下方有一个空白。

通常我会在 iOS6 上重置有问题的视图的来源(在 ViewDidLoad 或类似的地方),然后继续我的方式。但是,由于我的内容位于 UIContainerView 中,因此加载后我似乎无法更改框架。 (我在prepareForSegue中试过这个:加载UIContainerView时。我愿意做错了吗?呵呵)

我发现的最接近的方法是在 iOS 7 下使用以下代码使导航栏不透明并使其下方不显示内容,然后将整个空间用于我的 UIContainerView。

  // tell the view to not extend below this nav bar
  if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

此解决方案有效,但具有将状态栏显示为黑色的副作用(因为它在状态栏下方或多或少是“空白”)。或者,如果我将容器视图的顶部边缘放在状态栏下方,在 iOS 6 上,导航栏下方会有很大的空隙。

我可以不使用导航控制器,但在这种情况下似乎有点笨拙,我想将其作为最后的手段。

【问题讨论】:

    标签: objective-c ipad uinavigationcontroller ios7 uicontainerview


    【解决方案1】:

    我已经找到了解决办法。

    您需要在 iOS 7 中设置 barTintColor,它似乎也为主状态栏着色,以及将导航栏设置为不透明,如下所示:

    mainController.navigationBar.barTintColor = [SRPRTabletHelpers customUserColor];
    mainController.navigationBar.translucent = NO;
    

    不透明是关键,同时设置颜色不仅设置常规导航栏,还设置状态栏下方的颜色。

    我还需要将 containerView 顶部边缘更改为包含在导航控制器中的视图的完整高度,因为它不是透明的,并且它在 iOS6 和 iOS 7 上的工作方式相同。

    【讨论】:

      【解决方案2】:

      虽然您提到已经解决了这个问题,但您的方法似乎需要大量手动代码和 if 检查。 iOS 7 UI Transition guide, in the Supporting iOS 6 chapter 提到了另一种方式:首先按照您的做法为 iOS7 设计界面,将您的视图延伸到导航栏下方。

      然后,在界面构建器中打开 UI 元素的大小检查器并修改 iOS 6/7 增量。当故事板不在 iOS 7 上运行时,将应用这些值。例如,在您的情况下,您可以选择所有视觉元素,然后将 Y 增量设置为 -44,这是标准导航高度。这将使 UI 在 iOS6 上向上,补偿视图不在导航栏下方的事实。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-29
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 2014-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多