Niedawno zaktualizowałem swój Xcode do 11.4. Kiedy uruchamiam aplikację na urządzeniu, zauważyłem, że wszystkie tytuły moich elementów nawigacyjnych stały się całkowicie czarne po ustawieniu z scenorysu.
Nie możesz zmienić żadnego z kodu, następujący wiersz kodu już nie działa
self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
Sprawiam, że działa tylko przy użyciu UINavigationBarAppearance na iOS 13
@available(iOS 13.0, *)
private func setupNavigationBar() {
let app = UINavigationBarAppearance()
app.titleTextAttributes = [.foregroundColor: UIColor.white]
app.backgroundColor = Constants.Color.barColor
self.navigationController?.navigationBar.compactAppearance = app
self.navigationController?.navigationBar.standardAppearance = app
self.navigationController?.navigationBar.scrollEdgeAppearance = app
self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
}
Czy ktoś może mi wyjaśnić, dlaczego? To kluczowy błąd, czy jakaś nowa ukryta funkcja?
ios
swift
xcode
navigationbar
Tudor Popa
źródło
źródło
Odpowiedzi:
Apple ostatecznie to naprawiło w wersji 11.4.1
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes
źródło
Naprawiłem to, używając zamiast tego UINavigationBarAppearance z: Dostosowywanie paska nawigacyjnego aplikacji
Uwaga: podklasowałem UINavigationController , i to zostało wywołane z przesłonięcia viewWillAppear .
... lub dla AppDelegate , dla całej aplikacji:
... dla AppDelegate, dla całej aplikacji, w Objective-C:
źródło
UINavigationBarAppearance()
do iOS 13 Apple i bez żadnego powodu na starym Xcode nie byliśmy uzależnieni od niego, ale od Xcode 11.4 musi go używaćUINavigationBarAppearance()
lub kolor tytułu będzie zawsze czarny.appearance.largeTitleTextAttributes
dla dużych tytułów.W serii ujęć dla kontrolera nawigacyjnego zmień wartość „Odcień paska” na wartość „Domyślna”, a następnie w kodzie możesz go zmienić w normalny sposób.
źródło
Nie jestem pewien, czy to błąd, czy nie.
Naprawiliśmy to, ustawiając „Styl paska stanu” na ciemną lub jasną zawartość w ustawieniach projektu. To wymusi kolor tekstu paska stanu w określony sposób, a nie zostanie określony na podstawie urządzeń w trybie jasnym lub ciemnym.
Ponadto należy ustawić wartość „Wyświetl wygląd paska stanu kontrolera” na „NIE” w swoim Info.plist. bez tej wartości „Styl paska stanu” zostanie zastąpiony.
Następnie utwórz niestandardowy kontroler nawigacji i zaimplementuj go w swoich scenorysach.
* Kolory są ustawione, dzięki czemu można je wyraźnie zobaczyć.
Odkryłem, że lepiej było ustawić kod w ViewDidLoad niż ViewDidAppear, ponieważ moje kolory nie były ustawiane przy początkowym ładowaniu, tylko po przejściu wstecz i ponownym załadowaniu.
Odkryłem również, że ten problem może być związany z „Bar Tint” paska nawigacyjnego. kiedy po raz pierwszy próbowaliśmy go rozwiązać, ustawiliśmy „Bar Tint” na domyślny, co również wydawało się rozwiązać błąd. Jednak sprawiło, że nie mogliśmy uzyskać pożądanego koloru tła NavBar. Więc w moich scenariuszach upewniłem się, że dla tej wartości ustawiłem wartość domyślną.
Mam nadzieję, że to pomoże
źródło
nie ma potrzeby obejścia tego problemu. to błąd w Xcode Interface Builder. Aktualizacja wydania Apple dla Xcode 11.4.1
z informacji o wersji dla programistów Apple
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes
źródło
Podobnie do odpowiedzi Stu Carney z 3/25, dodałem jeszcze kilka szczegółów implementacji.
Utwórz podklasę UINavigationController . Dodaj następujące elementy, aby wyświetlićWillAppear:
Następnie zastąp preferowaneStatusBarStyle :
Jeśli chcesz dynamicznie aktualizować pasek nawigacyjny i pasek stanu, jak w przypadku metody UISwitch IBAction lub metody wyboru, dodaj:
Pamiętaj też, aby ustawić wszystkie paski nawigacji i przyciski paska na domyślne kolory w IB. Wygląda na to, że Xcode ma błąd polegający na tym, że kolory IB zastępują kolory ustawione programowo.
źródło
W moim przypadku po aktualizacji Xcode z 11.3 do 11.4 ten błąd wystąpił. Muszę więc zmienić kod, by go wysadził, aby ustawić obraz jako tło na pasku nawigacyjnym.
źródło