Wie macht man eine UINavigationBar transparent ? Ich möchte jedoch, dass die Balkenelemente sichtbar bleiben.
235
Wie macht man eine UINavigationBar transparent ? Ich möchte jedoch, dass die Balkenelemente sichtbar bleiben.
Wenn sich jemand fragt, wie dies in iOS 7+ erreicht werden kann, finden Sie hier eine Lösung (auch iOS 6-kompatibel).
In Ziel-C
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
In Swift 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
In schneller 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Die Einstellung translucent
in YES
der Navigationsleiste reicht aufgrund eines in der UINavigationBar
Dokumentation beschriebenen Verhaltens aus . Ich werde hier das relevante Fragment melden:
Wenn Sie diese Eigenschaft in
YES
einer Navigationsleiste mit einem undurchsichtigen benutzerdefinierten Hintergrundbild festlegen , wendet die Navigationsleiste eine Systemopazität von weniger als 1,0 auf das Bild an.
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
In iOS5 können Sie dies tun, um die Navigationsleiste transparent zu machen:
quelle
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
Von IOS7:
quelle
Für alle, die dies in Swift 2.x tun möchten:
oder Swift 3.x:
quelle
Das scheint zu funktionieren:
quelle
-drawRect:
eine Unterklasse überschreiben , nicht eine Kategorie, und diese Unterklasse dann als Navigationsleiste verwenden.Nachdem Sie das getan haben, was alle anderen oben gesagt haben, dh:
... meine Navigationsleiste war noch weiß . Also habe ich diese Zeile hinzugefügt:
... et voila! Das schien den Trick zu tun.
quelle
Wenn Sie mit der neuesten Beta-Version von iOS 13.4 und XCode 11.4 erstellen, funktioniert die akzeptierte Antwort nicht mehr. Ich habe einen anderen Weg gefunden, vielleicht ist es nur ein Fehler in der Beta-Software, aber ich schreibe ihn dort auf, nur für den Fall
(schnell 5)
quelle
Ich weiß, dass dieses Thema alt ist, aber wenn die Leute wissen wollen, wie es gemacht wird, ohne die drawRect-Methode zu überladen.
Das brauchen Sie:
quelle
Der folgende Code erweitert die obere Antwort, die für diesen Thread ausgewählt wurde, um den unteren Rand zu entfernen und die Textfarbe festzulegen:
Die letzten beiden codierten Zeilen dieses Codes legen die Transparenz fest. Ich habe diesen Code aus diesem Thread ausgeliehen und er hat perfekt funktioniert!
Die "clipsToBounds" -Eigenschaft war Code, den ich gefunden habe und der die untere Grenzlinie mit ODER ohne eingestellte Transparenz entfernt hat (wenn Sie sich also stattdessen für einen durchgehenden weißen / schwarzen / etc. Hintergrund entscheiden, gibt es immer noch keine Grenzlinie).
Die Zeile "tintColor" (2. codierte Zeile) setzt meinen Zurück-Knopf auf hellgrau
Ich habe barTintColor als Backup behalten. Ich weiß nicht, warum Transparenz nicht funktionieren würde, aber wenn nicht, möchte ich, dass mein BG weiß ist, wie ich es früher hatte
quelle
für Swift 3.0:
quelle
C # / Xamarin-Lösung
quelle
Versuchen Sie den folgenden Code:
quelle
Eine andere Möglichkeit, die für mich funktioniert hat, besteht darin, UINavigationBar zu unterklassifizieren und die drawRect-Methode leer zu lassen !!
quelle
In Swift 4.2
(in viewWillAppear) und dann in viewWillDisappear, um es rückgängig zu machen, setzen
quelle
Meinen Sie damit völlig transparent oder verwenden Sie den durchscheinend-schwarzen Stil, der in der Foto-App angezeigt wird? Letzteres können Sie erreichen, indem Sie seine
barStyle
Eigenschaft auf setzenUIBarStyleBlackTranslucent
. Ersteres ... da bin ich mir nicht sicher. Wenn Sie möchten, dass die darauf befindlichen Elemente weiterhin sichtbar sind, müssen Sie möglicherweise in der Ansichtshierarchie der Leiste herumgraben und die Ansicht mit dem Hintergrund entfernen.quelle
Dies funktioniert für Swift 2.0.
quelle
Überprüfen Sie RRViewControllerExtension , das sich mit der Verwaltung des Erscheinungsbilds von UINavigation-Leisten befasst.
Mit RRViewControllerExtension in Ihrem Projekt müssen Sie nur überschreiben
in dir viewcontroller.
quelle
quelle