Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当位于选项卡栏控制器内时,拆分视图控制器的导航栏较暗_Ios_Uitabbarcontroller_Uisplitviewcontroller - Fatal编程技术网

Ios 当位于选项卡栏控制器内时,拆分视图控制器的导航栏较暗

Ios 当位于选项卡栏控制器内时,拆分视图控制器的导航栏较暗,ios,uitabbarcontroller,uisplitviewcontroller,Ios,Uitabbarcontroller,Uisplitviewcontroller,如果将拆分视图控制器放置在选项卡栏控制器内,则左侧的导航栏和选项卡栏会更暗。我附上了一张截图。我创建了一个主细节应用程序,然后添加了一个选项卡栏控制器。您如何纠正此问题 将导航控制器的view backgroundColor设置为白色: self.navigationController?.view.backgroundColor = UIColor.whiteColor() 这将保持浅灰色 也可以禁用半透明,但导航栏将为白色: self.navigationController?.navig

如果将拆分视图控制器放置在选项卡栏控制器内,则左侧的导航栏和选项卡栏会更暗。我附上了一张截图。我创建了一个主细节应用程序,然后添加了一个选项卡栏控制器。您如何纠正此问题


将导航控制器的view backgroundColor设置为白色:

self.navigationController?.view.backgroundColor = UIColor.whiteColor()
这将保持浅灰色

也可以禁用半透明,但导航栏将为白色:

self.navigationController?.navigationBar.translucent = false
答案来自这个堆栈溢出问题:

在撰写本文时(2017年5月),此漏洞仍然存在。我真不敢相信苹果竟然不关心这件事。更糟糕的是,如果您旋转设备,从侧面打开主机并向后旋转,半透明条将切换到位,突然主机有一个工作的半透明条,而细节没有:/

我能想到的唯一可能的解决办法是摆脱UITabBarController,而是使用底部带有UITabBar的普通UIViewController和UIViewController包含API构建我自己的选项卡栏控制器实现

这意味着需要大量的编码来重新发明轮子。很遗憾没有使用UITabBarController,但事实就是这样。你必须在容器控制器和它的所有优秀功能之间进行权衡,比如免费获得的“更多”控制器和半透明条


如果你可以在没有半透明条的情况下生活,我仍然会选择UITabBarController来完成所有的编码。另一方面,可以用UICollectionView替换UITabBar,并拥有6个以上的项目,而不需要“更多”控制器。

虽然其他答案去除了灰色区域,但内容不会出现在栅栏后面,这使得它们实际上不是半透明的。如果您希望保持效果,我找到了一个解决方法:不要使用故事板

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let greenVC = UIViewController()
    greenVC.view.backgroundColor = .green
    let redVC = UIViewController()
    redVC.view.backgroundColor = .red
    let splitVC = UISplitViewController()
    splitVC.viewControllers = [UINavigationController(rootViewController: greenVC), UINavigationController(rootViewController: redVC)]
    let rootTBC = UITabBarController()
    rootTBC.viewControllers = [splitVC]
    window?.rootViewController = rootTBC

    return true
}
之前,请使用stock Interface Builder控制器(注意主导航栏和选项卡栏的灰色背景):

之后,在代码中实例化控制器(现在请参见背景如何获得正确的背景颜色):


我发现主视图控制器没有延伸到导航栏和选项卡栏下方,因此它从拆分视图控制器而不是主视图控制器中拾取背景色,这就是为什么主视图控制器颜色较暗的原因。视图调试器显示主视图实际上延伸到了导航栏下方。由于某些原因,钢筋未正确绘制。你找到解决这个问题的方法了吗?没有,这是个bug。我把它给一个苹果工程师看。我发帖时把它写了回去,但他们还没有修复,而且似乎也没有任何解决办法。哦,太好了。感谢您的跟进。这在iOS 13.0中已修复