Ich habe kürzlich meinen Xcode auf 11.4 aktualisiert. Wenn ich die App auf dem Gerät ausführe, ist mir aufgefallen, dass alle Titel meiner Navigationselemente beim Festlegen über das Storyboard vollständig schwarz wurden.
Sie können weder den Code ändern, die folgende Codezeile funktioniert nicht mehr
self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
Ich mache es nur mit einigen iOS 13 Sachen UINavigationBarAppearance
@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]
}
Kann mir jemand erklären warum ??? Dies ist ein entscheidender Fehler oder eine neue versteckte Funktion?
ios
swift
xcode
navigationbar
Tudor Popa
quelle
quelle
Antworten:
Apple hat es endlich in Version 11.4.1 behoben
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes
quelle
Dies wurde für mich behoben, indem stattdessen UINavigationBarAppearance verwendet wurde: Anpassen der Navigationsleiste Ihrer App
Hinweis: Ich habe UINavigationController in Unterklassen unterteilt , und dies wurde beim Überschreiben von viewWillAppear aufgerufen .
... oder für AppDelegate app-weit:
... für AppDelegate, App-weit, in Objective-C:
quelle
UINavigationBarAppearance()
und ohne Grund auf alten Xcode haben wir uns nicht darauf verlassen, aber da Xcode 11.4 verwendet werden muss,UINavigationBarAppearance()
wird die Titelfarbe immer Schwarz sein.appearance.largeTitleTextAttributes
für große Titel.Ändern Sie im Storyboard für Ihren Navigationscontroller die "Balkentönung" in den Wert "Standard". In Ihrem Code können Sie sie dann wie gewohnt ändern.
quelle
Ich bin mir nicht sicher, ob es ein Fehler ist oder nicht.
Wir haben dies behoben, indem wir den "Statusleistenstil" in der Projekteinstellung entweder auf dunklen oder hellen Inhalt eingestellt haben. Dadurch wird die Textfarbe der Statusleiste auf eine bestimmte Weise erzwungen, anstatt anhand der Geräte im Hell- oder Dunkelmodus festgelegt zu werden.
Außerdem müssen Sie in Ihrer Info.plist den Wert "Erscheinungsbild der Controller-basierten Statusleiste anzeigen" auf "NEIN" setzen. ohne diesen Wert wird der "Statusleistenstil" überschrieben.
Erstellen Sie als Nächstes einen benutzerdefinierten Navigationscontroller und implementieren Sie ihn in Ihre Storyboards.
* Die Farben sind so eingestellt, dass Sie sehen können, dass sie klar funktionieren.
Ich fand es besser, den Code in ViewDidLoad anstatt in ViewDidAppear festzulegen, da meine Farben beim ersten Laden nicht festgelegt wurden, sondern erst nach dem Zurücknavigieren und erneuten Laden.
Ich habe auch festgestellt, dass dieses Problem möglicherweise mit dem "Bar Tint" einer NavBar zusammenhängt. Als wir zum ersten Mal versuchten, das Problem zu beheben, haben wir die "Balkentönung" auf den Standardwert gesetzt, und das schien auch den Fehler zu beheben. Es hat es jedoch so gemacht, dass wir nicht die NavBar-Hintergrundfarbe bekommen konnten, die wir wollten. Daher habe ich in meinen Storyboards sichergestellt, dass dieser Wert nur aus gutem Grund auf den Standardwert gesetzt wird.
Ich hoffe es hilft
quelle
Die Problemumgehung ist nicht erforderlich. Es handelt sich um einen Fehler im Xcode Interface Builder. Apple Release Update für Xcode 11.4.1
aus den Versionshinweisen für Apple-Entwickler
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes
quelle
Ähnlich wie bei Stu Carneys Antwort vom 25. März habe ich einige weitere Implementierungsdetails hinzugefügt.
Erstellen Sie eine Unterklasse von UINavigationController . Fügen Sie viewWillAppear Folgendes hinzu:
Dann überschreiben preferredStatusBarStyle :
Wenn Sie die Navigationsleiste und die Statusleiste dynamisch aktualisieren möchten, z. B. über eine UISwitch-IBAction oder eine Auswahlmethode, fügen Sie Folgendes hinzu:
Stellen Sie außerdem sicher, dass alle Navigationsleisten und Balkenschaltflächen in IB auf die Standardfarben eingestellt sind. Xcode scheint einen Fehler zu haben, bei dem die IB-Farben die programmgesteuert festgelegten Farben überschreiben.
quelle
In meinem Fall trat dieser Fehler auf, nachdem ich Xcode von 11.3 auf 11.4 aktualisiert hatte. Also muss ich meinen Code ändern, um zu blasen, um ein Bild als Hintergrund in der Navigationsleiste festzulegen.
quelle