objective-c - 使导航 Controller 在 iOS 6 和 iOS 7 中工作相同

标签 objective-c ipad uinavigationcontroller ios7 uicontainerview

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

我正在将 iOS 6 应用程序更新到 iOS 7,但希望继续支持 iOS 6。我有一个嵌入 UINavigationController 中的主顶级 View 。导航 Controller 中的 View 中有一个容器 View 。我正在使用 Storyboard来布置 View 。

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

通常我会重置 iOS6 上有问题的 View 的原点(在 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;

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

我可以消除导航 Controller 的使用,但在这种情况下这似乎有点严厉,我想将其作为最后的手段。

最佳答案

我已经找到了解决这个问题的方法。

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

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

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

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

关于objective-c - 使导航 Controller 在 iOS 6 和 iOS 7 中工作相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105437/

相关文章:

objective-c - 带有文本输入的 iOS 9+ 推送通知不调用 handleActionWithIdentifier : forRemoteNotification: withResponseInfo:

iphone - 像弹出警报 View 时一样暗淡的背景

ios - UIbutton 标题上的自定义字体剪裁在单词顶部

iPad 上的 JavaScript 错误

ios - iPhone 和 iPad 之间的不同行为

iphone - UIPickerView 导致应用程序崩溃

ios - 向下/向上滚动时,uitableview 中的 uitextfield 文本已被重置 iOS

objective-c - AVAudioSessionCategoryPlayAndRecord 使 AirPlay 不可见

swift - 如何检测推送的 View Controller 是否再次出现?

c# - 推送通知 : Navigate to a ViewController from the AppDelegate