来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡
Posted
技术标签:
【中文标题】来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡【英文标题】:Odd behavior from UITabBar where background color only shows for one tab 【发布时间】:2016-12-09 02:50:57 【问题描述】:我正在使用Swift 3
,我研究了各种方法来设置UITabBar
的backgroundColor
颜色。最简单的方法是更改AppDelegate
的didFinishLaunchingWithOptions
中的属性。当我尝试这样做时,UITabBar
以标准颜色启动,这不是我想要的结果。
但是,当我转到下一个选项卡时,UITabBar
颜色会更改为我想要的颜色。
在此之后,我尝试subclass
我的UITabBarController
并尝试在viewDidLoad
和viewDidLayoutSubViews
中设置背景颜色。所有这三种尝试都表现出完全相同的行为——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) 我有一个启动屏幕,用户在其中选择确认某些内容,然后他们是 segued
到 UITabBarController
。这可能是问题的一部分吗?
【问题讨论】:
【参考方案1】:更改标签栏颜色的基本方法不是像您正在做的那样设置它的backgroundColor
,而是设置它的barTintColor
。 (要进行更复杂的控制,请使用彩色backgroundImage
。)
【讨论】:
是的,这是一个很好的方法,但是为什么当我在UITabBar
中使用UIColor.red
与UINavigationBar
相比时,这两种颜色看起来会有所不同?我可以让它们一样吗? UINavigationBar.appearance().backgroundColor = UIColor.red
UITabBar.appearance().barTintColor = UIColor.red
我告诉过你。如果您想精确控制颜色,请使用backgroundImage
。还要注意半透明。
另外,你也做错了导航栏颜色。两个错误不能构成一个正确。设置条形颜色,而不是背景颜色。
感谢您指出我错误地使用了backgroundColor
来设置UINavigationBar
和UITabBar
。在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 的奇怪行为,其中背景颜色仅显示一个选项卡的主要内容,如果未能解决你的问题,请参考以下文章
快速更改UITabBar中“更多” UINavigationController的背景颜色
UINavigationBar 的添加改变了 UITabBar 的背景颜色