UITabbarController 内的 UISplitViewController:主控制器不在 UITabbar 下

UISplitViewController inside UITabbarController: master controller doesn't go under UITabbar

我通读了几个现有问题并尝试设置 "Under Opaque Bar" 无济于事。

看看主视图下的导航栏和标签栏怎么变黑了?这是带有拆分视图的普通 Xcode7 新项目。唯一添加的东西 - UITabbarController。

我错过了什么?

更新 这里是link压缩项目:https://dl.dropboxusercontent.com/u/6402890/dds1.zip

这是一个很奇怪的问题。用你的项目测试,它似乎只影响 iPad Air 和 iPad Air2 和 iPhone 6+,而不影响 iPad Retina 或 iPad 2.

问题与UINavigationBar barTintColor 和UITabBar barTintColor 的设置有关。

您可以通过执行以下操作解决您的问题:

1) 对于每个 UINavigationController,将 UINavigationBar barTintColor 设置为白色或取消选择 translucent 开关。您可以在 IB 中执行此操作,方法是选择导航控制器,然后在视图层次结构中选择包含的导航栏。

这处理顶部阴影。

2) 对于 UITabBarController,将 UITabBar barTintColor 设置为白色或取消选择 translucent 开关。您可以在 IB 中执行此操作,方法是选择选项卡栏控制器,然后在视图层次结构中选择包含的选项卡栏。

这处理底部阴影。


当我将两者都设置为白色时,它起作用了。当我将两者都设置为不透明时,它会起作用。设置你想要的颜色似乎是最好的主意,而不是改变半透明设置。

至于为什么?使用 3D 查看器,它看起来像有一个长导航栏样式的 UIView,它是 64 点高和灰色,沿着拆分视图控制器的整个宽度运行。无论出于何种原因,在 iPad Air 和 iPhone 6s 上,这都显示出来了。我想这与硬件加速或较新设备中的某些其他设备特定功能有关。

更新:

再看一看,阴影的原因是UISplitViewController的背景色。您似乎无法在 IB 中设置它,但它看起来默认情况下是灰色的,这就是您看到的颜色。

要解决此问题,您需要为 UISplitViewController 创建一个 class 并设置主视图背景颜色。类似于:

class MySplitViewController: UISplitViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set the background color to white instead of default grey.
        self.view.backgroundColor=UIColor.whiteColor()
    }
}

所以这似乎是最简单的解决方案。

确保主 VC 及其导航控制器已检查其 "under top bars" 和 "under bottom bars",并且 table 视图的 top/bottom 约束supreview 是相对于边距的。还要确保主视图的背景既不暗也不清晰。