更新到 Xcode 8 后,tabBar 和导航栏变暗

Posted

技术标签:

【中文标题】更新到 Xcode 8 后,tabBar 和导航栏变暗【英文标题】:tabBar & navigation bar became dark after updating to Xcode 8 【发布时间】:2016-09-19 11:02:56 【问题描述】:

将我的 Xcode 更新到 Xcode 8 后,我遇到了这个奇怪的问题。 I have a tab bar and 3 tabs in it when tab1 is selected tab bar and navigation looks like this :

标签栏的背景颜色是白色的,但它显示的是深色

当我选择任何其他选项卡时,问题就会得到解决

在下图中我选择了tab2

我不知道为什么会这样,但是在 tab1 的 ViewController 我有一个 tableView 而在 tab2 我有一个 ViewController

有人知道为什么会这样吗??

调试层次结构:

选择Tab1时


选择任何其他选项卡时

我不知道为什么,但是 tabbar 的 UIVisualEffectBackdropView 的背景颜色在 tab1 上是黑色的,在 tab1 上是透明的 其他标签

【问题讨论】:

这看起来像你在它上面有另一个视图或掩码。不仅背景不同,标签图像颜色似乎也不同。或者检查一些 alpha-s。如果你设置了一些alpha,之前的ios SDK可能还看不懂。 请看下面的答案。希望这已经为您解决了。 【参考方案1】:

对于其他因 OP 不同原因而遭受此问题的人:

当我将行 edgesForExtendedLayout = [] 添加到我的 UIViewController 的 loadView() 方法到 stop my view going under the navigation bar 时,我就发生了这个确切的问题。因此,删除该行并使用navigationController?.navigationBar.isTranslucent = false 实现相同的目标为我修复了它(尽管 John Doe 的解决方案可能也是可行的)。我猜当你的工具栏下没有视图时,UIVisualEffectBackdropView 变得不透明,它恰好是黑色的。如果您的工具栏是透明的,这似乎会产生一个黑色的工具栏。

【讨论】:

这是有史以来最好的答案!。谢谢。【参考方案2】:

您可以在本地(例如,如果您有 CustomTabBarController)和全局解决此问题。我在这里为您提供两种解决方案:

1.本地:

    class YourCustomTabBarVC: UITabBarController 

    //MARK:- Initializers
    required init?(coder aDecoder:NSCoder) 
        super.init(coder: aDecoder)
        __customInit()
      

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) 
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        __customInit()
    

    fileprivate func __customInit() 
        addObservers()

       //Customize TabBar appearance:
        tabBar.backgroundColor = UIColor.white
    
    

2。全局:在您的 AppDelegate.swift 中:

 func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions
    launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
   /* Your other code*/   
   UITabBar.appearance().backgroundColor = UIColor.white // UR_DESIRED_COLOR


我建议你使用全局方法。添加那一行,瞧!你会争先恐后地在下面写个人感谢信息!

【讨论】:

【参考方案3】:

原来在我的工具栏上添加阴影导致了这个问题:

下面的代码在 Xcode7 (swift 2) 中给了我适当的阴影,但在更新到 Xcode 8 (swift 3) 后,它改变了我其他栏的颜色(标签栏 + 导航栏):

toolbar.layer.masksToBounds = false
toolbar.layer.shadowOffset = CGSize(width: -1, height: 1)
toolbar.layer.shadowRadius = 1
toolbar.layer.shadowOpacity = 0.5

【讨论】:

【参考方案4】:

这在我执行 segue 时帮助了我:

删除hidesBottomBarWhenPushed 或禁用它。

destination.hidesBottomBarWhenPushed = false

【讨论】:

【参考方案5】:

我刚刚将视图控制器的 background color 属性从 .default 更改为 .systemBackgroundColor

【讨论】:

以上是关于更新到 Xcode 8 后,tabBar 和导航栏变暗的主要内容,如果未能解决你的问题,请参考以下文章

iOS去除导航栏和tabbar的1px横线

从 iOS 11 上的左侧菜单导航后 Xcode 9 导航栏问题不在 iOS 10.3 及更低版本上

Xcode 11.4 导航栏按钮问题

Xcode 13 - swift OS 15 中的导航栏和状态栏文本颜色变化

升级到 XCode 13(和 iOS 15)后选项卡和导航栏发生变化

Xcode 使查看全屏,隐藏状态栏,导航栏等