2017-07-17 38 views
6

Po aktualizacji do Swift 4, otrzymuję błąd kompilatora:UIAppearance Swift 4

Static member 'appearance' cannot be used on protocol metatype 'UIAppearance.Protocol'

Tu jest moja viewWillAppear metoda w moim zwyczaju Tab Bar Controller podklasy, jestem ustawienia czcionki tekstu pozycji .

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    // compiler error on line below 
    UIAppearance.appearance().setTitleTextAttributes([NSAttributedStringKey.font: font], for: UIControlState.normal) 
} 

Mam problem z naprawieniem tego, wszelkie wskazówki będą mile widziane, dzięki!

+0

Co ten kod ma zrobić? Zwykle wygląd jest ustawiony dla konkretnej klasy UI, np. 'UIBarItem.appearance(). SetTitleTextAttributes ...' –

+0

Zapewnię więcej kontekstu w pytaniu. Jest to niestandardowa klasa kontrolera paska zakładek, zmieniam czcionkę elementów paska. –

+0

Musisz zadzwonić z klasy UI, a nie bezpośrednio z "UIAppearance". – dimpiax

Odpowiedz

7

W prawo - obecne narzędzie do konwersji Swift 4 (od Xcode 9 Beta 4) zostaje trochę uniesione.

Udało mi się szybko rozwiązać problem, cofając kod konwersji UIAppearance, a następnie aktualizując poszczególne atrybuty.

Na przykład w Swift 3 miałem:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .selected) 

Xcode "pomógł" mi zmieniając go do:

UIAppearance.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.white], for: .selected) 

udało mi się uspokoić błędów przez pół odwracanie, na:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.white], for: .selected) 
+0

To samo tutaj. Migrator zmienia typ na UIAppearance, zamiast, powiedzmy, UITabBarItem, UIImageView itp. – Womble