Wenn ich in einem Master-Detail-Navigationscontroller zwischen übergeordneten und untergeordneten Controllern hin und her navigiere, sehe ich oben rechts in der Navigationsleiste einen dunklen Schatten. Es begann, nachdem ich auf Xcode 5.1 aktualisiert hatte. Es fühlt sich rau und ablenkend an. Wie kann ich es loswerden?
91
darkColor
Ansicht noch vorhanden ist, und verursacht dieses Problem.behoben
quelle
navigationController.view.backgroundColor = .white
funktioniert nicht mehr unter iOS 11.navigationController.view.backgroundColor = .white
funktioniert unter iOS 12. Das Entfernen von durchscheinend aus der Navigationsleiste kann nicht in Situationen verwendet werden, in denen dies erforderlich ist, schwarzer Schatten jedoch nicht.Die Antwort von nonamelive ist perfekt. Um dasselbe in Interface Builder zu erreichen UND DIE ÜBERTRAGUNG NOCH ZU BEHALTEN , wählen Sie den Navigationscontroller aus und legen Sie ein benutzerdefiniertes Laufzeitattribut fest,
view.backgroundColor
wie im Screenshot (im Identitätsinspektor) gezeigt. Wiederholen Sie diesen Vorgang für alle Navigationscontroller, bei denen dieses Problem auftritt.Es scheint, dass dieses ganze Problem auftritt, weil die schwarze Farbe (oder eigentlich keine Farbe) von UINavigationController zu dem Zeitpunkt durchläuft, zu dem CoreGraphics-Snapshots zu Beginn der Animation erstellt werden. Wenn Sie es also auf Weiß setzen, wird dies verhindert.
quelle
UINavigationController
aktiviert werden, nicht auf dem viewController.Dies scheint ein Fehler zu sein, der in iOS 7.1 eingeführt wurde. In meinem Fall wird dies durch eine UIToolbar verursacht, die direkt unter der Navigationsleiste platziert ist. Der dunkle Schatten wird auch in der durchscheinenden Registerkartenleiste angezeigt.
Der Schatten scheint durch die Hintergrundansicht der UIToolbar verursacht zu werden. Ich verwende diese Problemumgehung jetzt im Ansichts-Controller mit der Symbolleiste, die die Hintergrundansicht der Symbolleiste während des Übergangs verbirgt:
Dies ist der Code für
[UIView findViewRecursively:]
Ich habe dieses Radar abgelegt: http://openradar.appspot.com/16418845
quelle
backgroundView
.[self.toolbar valueForKey:@"_backgroundView"]
. Bitte beachten Sie, dass dies eine private API ist, aber ich denke, Sie werden nicht von Apple erwischt, da_backgroundView
es sich nur um einen generischen Namen handelt.Es scheint mit jeder Leiste (TabBar oder ToolBar) zu passieren, die durchscheinend ist.
Eine Möglichkeit, dies zu beheben, besteht darin, die
_tabBar.translucent = NO;
(in meinem Fall) festzulegen. Dies verhindert den unerwünschten Schatten unter der oberen Navigationsleiste, während die Navigationsleiste durchscheinend bleibt. Leider ist die untere Leiste nicht mehr durchscheinend.Es kann wieder auf durchscheinend gesetzt werden, aber all dies muss geschehen, nachdem die gesamte Push-Animation beendet ist, sodass das Umschalten dieser Eigenschaft gut erkennbar ist.
Für den Fall, dass die untere Leiste jedoch auch durchscheinend sein muss und ich nicht möchte, dass der Benutzer die Änderung sieht, habe ich sie wie folgt gelöst:
Dann
viewDidAppear:
kehrt ich das einfach zurück:Es gibt nur eine kleine Änderung im Erscheinungsbild, aber es ist kaum wahrnehmbar und viel besser als der Schatten unter der Navigationsleiste.
Hoffe, es wird anderen helfen, Balken durchscheinend zu halten, bis Apple dieses Verhalten behebt, da Balken in einigen Fällen ausgeblendet werden sollen, anders als es in anderen Posts speziell für die vorgeschlagen wurde
UITabBar
quelle
view.backgroundColor
für Ihren UITabBarController im Storyboard und setzen Sie es auf eine weiße Farbe.Das funktioniert bei mir in Swift
In der
AppDelegate
on-didFinishLaunchingWithOptions
Methode setze ich Folgendes:quelle
Dies funktioniert bei iOS 13 mit hellen und dunklen Themen sowie bei älteren iOS-Versionen.
Fügen Sie dem AppDelegate den folgenden Code zur
application(didFinishLaunchingWithOptions)
Methode hinzu:quelle
Hier ist meine Variante ... sie erfordert viel weniger Code als Toms Antwort und ist effizienter. Dies ist WENN Sie eine durchscheinende Navigationsleiste wünschen und auch dieses Schattenproblem beheben möchten.
Im Quell-ViewController (der in den Navigations-Controller eingebettet ist) ...
und
Das Ergebnis entspricht dem von Tom (visuell für den Endbenutzer) und ist einfacher zu implementieren. Hoffe das hilft...
quelle
Dies funktioniert bei mir. Platzieren Sie es in der Funktion, in der Sie den neuen ViewController drücken
quelle
Folgendes funktioniert ebenfalls und lässt die Navigationsleiste transparent:
[UIApplication sharedApplication].keyWindow.backgroundColor = [UIColor whiteColor];
quelle
Es ist zwar nicht dasselbe wie die Standard-iOS-Implementierung, aber dies ist eine gute Möglichkeit, das Problem zu beheben:
Sie erhalten eine schöne Ein- / Ausblendanimation der Registerkartenleiste. Fügen Sie den Code im Stammverzeichnis hinzu
UIViewController
.quelle
Wenn Sie den Interface Builder verwenden, können Sie einfach die Navigationsleiste in Ihrem Navigationscontroller auswählen und das Kontrollkästchen Durchscheinend zwischen Stil und Balkentönung im Attributinspektor deaktivieren, um diesen seltsamen Effekt zu beseitigen.
quelle