У меня есть подклассы UITabBarController
, чтобы учесть некоторые настройки, специфичные для моего приложения.Это корневой контроллер моего 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
установлен в viewDidLoad
его пользовательского класса TabBarController
,Напротив, этот код был помещен в метод viewDidLoad
каждого класса контроллера составного представления в моем проекте.Должна существовать проблема синхронизации времени вызова, из-за которой цвет оттенка не может быть установлен в одном сценарии и работает правильно в другом.
Вывод ключа : Если вы настроилиКонтроллер панели вкладок программно, убедитесь, что вы установили свойства tabBarItem
на ранней стадии, чтобы обеспечить правильную работу оттенков.