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

时间:2016-12-09 02:50:57

标签: ios swift3 uitabbarcontroller uitabbar

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

但是,当我转到下一个标签时,AppDelegate颜色会变为我想要的颜色。

在此之后,我尝试UITabBar我的UITabBar,并尝试在subclassUITabBarController中设置背景颜色。所有这三个尝试都表现出完全相同的行为 - 这是使用标准颜色启动的viewDidLoad,并且仅当我选中下一个标签时才更改颜色。

这是我的代码:

App Delegate

viewDidLayoutSubViews

viewDidLoad中

UITabBar

viewDidLayoutSubviews

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

我的问题如下:

1)我可以将此消除为约束问题吗?我没有修改或设置override func viewDidLoad() { super.viewDidLoad() self.tabBar.backgroundColor = UIColor.red }

的任何约束

2)我有一个启动屏幕,用户选择确认某些内容,然后override func viewDidLayoutSubviews() { self.tabBar.backgroundColor = UIColor.red } UITabBar。这可能是问题的一部分吗?

2 个答案:

答案 0 :(得分:1)

更改为标签栏颜色的基本方法不是设置其backgroundColor,而是设置其barTintColor。 (对于更复杂的控制,请使用彩色backgroundImage。)

答案 1 :(得分:0)

把它放在我的app委托给我一个标记为红色的标签栏。

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
}