【发布时间】:2019-02-22 16:51:17
【问题描述】:
我对@987654323@ 进行了子类化,以允许针对我的应用进行一些自定义。它是我的UIWindow 的根视图控制器,并在启动时正确显示,甚至还显示正确的选项卡的视图层次结构。
问题在于所选标签栏项目的色调。在自定义标签栏控制器子类的viewDidLoad 中,我为标签栏设置了未选择和选定的色调颜色。见下文:
override func viewDidLoad() {
super.viewDidLoad()
tabBar.tintColor = .tabBarItemActiveTint
tabBar.unselectedItemTintColor = .tabBarItemInactiveTint
tabBar.barTintColor = .tabBarBg
let dashboardVC = DashboardViewController.build()
let settingsVC = SettingsTableViewController.build()
let settingsNavC = UINavigationController(rootViewController: settingsVC)
settingsNavC.navigationBar.barStyle = .black
viewControllers = [dashboardVC, settingsNavC]
selectedViewController = dashboardVC
// Accessing the view property of each tab's root view controller forces
// the system to run "viewDidLoad" which will configure the tab icon and
// title in the tab bar.
let _ = dashboardVC.view
let _ = settingsVC.view
}
如您所见,控制器设置了其子视图层次结构,并且视图在底部加载,因此它们各自的viewDidLoad 方法在我有设置tabBarItem 的代码的位置运行。这是仪表板视图控制器的示例:
tabBarItem = UITabBarItem(title: "Dashboard", image: UIImage(named: Theme.dashboardTabBarIcon), tag: 0)
除了选定的图标和标题外,所有关于此的工作。当应用程序启动时,我可以看到选项卡栏,第一个视图层次结构(仪表板)在屏幕上可见,并且选项卡都正常运行。但是仪表板的图标和标题处于未选择状态。我必须实际点击标签栏图标才能更改状态以使其被选中。
点击其中一个选项卡后,所选状态将正常工作。问题仅出现在标签栏的第一次展示上。
这是一张显示标签栏在启动时的初始状态的图像。注意仪表板图标没有被选中,即使它是呈现的视图控制器。
更新
Skaal 下面的回答为我解决了这个问题。
供将来参考:我的问题中提供的代码与答案中的示例之间的主要区别在于 tabBarItem 是在他的自定义 TabBarController 类的 viewDidLoad 中设置的。相比之下,该代码被放置在我项目中每个组成视图控制器类的viewDidLoad 方法中。必须存在时间问题,即何时调用会导致色调颜色无法在一种情况下设置而在另一种情况下正常工作。
关键要点:如果您以编程方式设置标签栏控制器,请务必尽早设置 tabBarItem 属性以确保色调正常工作。
【问题讨论】:
标签: ios swift uitabbarcontroller uitabbaritem