来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡

Posted

技术标签:

【中文标题】来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡【英文标题】:Odd behavior from UITabBar where background color only shows for one tab 【发布时间】:2016-12-09 02:50:57 【问题描述】:

我正在使用Swift 3,我研究了各种方法来设置UITabBarbackgroundColor 颜色。最简单的方法是更改​​AppDelegatedidFinishLaunchingWithOptions 中的属性。当我尝试这样做时,UITabBar 以标准颜色启动,这不是我想要的结果。

但是,当我转到下一个选项卡时,UITabBar 颜色会更改为我想要的颜色。

在此之后,我尝试subclass 我的UITabBarController 并尝试在viewDidLoadviewDidLayoutSubViews 中设置背景颜色。所有这三种尝试都表现出完全相同的行为——UITabBar 以标准颜色启动,并且仅在我切换到下一个选项卡时才更改颜色。

这是我的代码:

应用代理

func application(_ application: UIApplication, 
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) 
    -> Bool 
        UITabBar.appearance().backgroundColor = UIColor.red
        return true

viewDidLoad

override func viewDidLoad() 
    super.viewDidLoad()
    self.tabBar.backgroundColor = UIColor.red

viewDidLayoutSubviews

override func viewDidLayoutSubviews() 
    self.tabBar.backgroundColor = UIColor.red

我的问题如下:

1) 我可以将其作为约束问题消除吗?我没有为UITabBar修改或设置任何约束

2) 我有一个启动屏幕,用户在其中选择确认某些内容,然后他们是 seguedUITabBarController。这可能是问题的一部分吗?

【问题讨论】:

【参考方案1】:

更改标签栏颜色的基本方法不是像您正在做的那样设置它的backgroundColor,而是设置它的barTintColor。 (要进行更复杂的控制,请使用彩色backgroundImage。)

【讨论】:

是的,这是一个很好的方法,但是为什么当我在UITabBar 中使用UIColor.redUINavigationBar 相比时,这两种颜色看起来会有所不同?我可以让它们一样吗? UINavigationBar.appearance().backgroundColor = UIColor.redUITabBar.appearance().barTintColor = UIColor.red 我告诉过你。如果您想精确控制颜色,请使用backgroundImage。还要注意半透明。 另外,你也做错了导航栏颜色。两个错误不能构成一个正确。设置条形颜色,而不是背景颜色。 感谢您指出我错误地使用了backgroundColor 来设置UINavigationBarUITabBar。在UINavigationBar 和 UITabBar` 中切换到一致的颜色是我的预期结果,对这两个项目使用barTintColor 解决了我的问题。【参考方案2】:

将它放在我的应用程序委托中会得到一个染成红色的标签栏。

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

    window = UIWindow(frame: UIScreen.main.bounds)
    let tabBarVC = UITabBarController()
    tabBarVC.viewControllers = [FirstViewController(), SecondViewController()]
    tabBarVC.tabBar.backgroundColor = UIColor.red
    window?.rootViewController = tabBarVC
    window?.makeKeyAndVisible()

    return true

【讨论】:

谢谢丹!有没有办法做到这一点而不必指定viewControllers的类型和数量? 当然,那部分代码只是一个示例。您可以在初始化UITabBarController 的任何位置配置选项卡栏的颜色。尽管如上所述,barTintColor 是要设置的适当属性。

以上是关于来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡的主要内容,如果未能解决你的问题,请参考以下文章

弹出框控件背景颜色奇怪的行为

使用 WinXp 常用控件时编辑控件背景颜色的奇怪行为

快速更改UITabBar中“更多” UINavigationController的背景颜色

UINavigationBar 的添加改变了 UITabBar 的背景颜色

UITabBar 在 iOS7 上更改一个 UITabBarItem 的背景颜色

如何使 UITabbar 透明以便超级视图的背景图像可见?