Как я могу контролировать внешний вид панели вкладок пользовательского интерфейса из моих пользовательских переменных - PullRequest
1 голос
/ 19 мая 2019

В приложении панели вкладок IOS есть как яркие, так и темные режимы отображения. Чтобы сделать это хорошо, Я хочу настроить внешний вид панели вкладок в соответствии с режимом отображения. У меня есть следующее код для этого.

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


        displayMode=UserDefaults.standard.integer(forKey: "displayMode")

        if displayMode==0 // bright display. want bright tab bar
        {   UITabBar.appearance().backgroundColor=UIColor.white
            UITabBar.appearance().barTintColor=UIColor.white
            UITabBar.appearance().unselectedItemTintColor = UIColor.darkGray
            UITabBar.appearance().tintColor = UIColor.blue
            UITabBar.appearance().isTranslucent = false
        }

        if displayMode==1 // dark display. want dark tab bar
        {   UITabBar.appearance().backgroundColor=UIColor.black
            UITabBar.appearance().barTintColor=UIColor.black
            UITabBar.appearance().unselectedItemTintColor = UIColor.lightGray
            UITabBar.appearance().tintColor = UIColor.white
            UITabBar.appearance().isTranslucent = false
        }

        return true
    }

Это работает, но плохо. Он может изменять цвета панели вкладок только при перезапуске приложения. Я хотел бы сделать это более немедленным. Выбор мест для размещения элементов управления ограничен к делегату приложения. Я хотел бы контролировать цвета панели вкладок из моего вместо основной области программы.

1 Ответ

0 голосов
/ 19 мая 2019

Appearance прокси не ограничен AppDelegate. Вы можете применять его где угодно в любое время, но учтите следующее:

iOS применяет изменения внешнего вида, когда представление входит в окно, оно не изменить внешний вид представления, которое уже находится в окне. Изменить появление вида, который в данный момент находится в окне, удалите вид из иерархии представления и затем верните его обратно.

Ссылка: https://developer.apple.com/documentation/uikit/uiappearance


Решение:

Представить и распустить манекен UIViewController. Тем самым обновляется видимое viewController окна.

Пример:

func randomTabBarAppearance() {
    UITabBar.appearance().backgroundColor = UIColor.init(red: CGFloat.random(in: 0...1),
                                                         green: CGFloat.random(in: 0...1),
                                                         blue: CGFloat.random(in: 0...1),
                                                         alpha: 1)

    present(UIViewController(), animated: false, completion: nil)
    dismiss(animated: false, completion: nil)
}
...