Wie machen Sie eine UINavigationBar transparent ? Obwohl ich möchte, dass die Bar-Elemente sichtbar bleiben.
Wenn sich jemand fragt, wie Sie dies in iOS 7+ erreichen können, finden Sie hier eine Lösung (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 Swift 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Das Festlegen von translucent
auf YES
in der Navigationsleiste führt den Trick aus, weil in der UINavigationBar
-Dokumentation ein Verhalten beschrieben wird. Ich berichte hier das relevante Fragment:
Wenn Sie diese Eigenschaft in einer Navigationsleiste mit einem undurchsichtigen benutzerdefinierten Hintergrundbild auf
YES
setzen, wendet die Navigationsleiste dem Bild eine Systemopazität von weniger als 1,0 an.
In iOS5 können Sie die Navigationsleiste transparent machen:
nav.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black)
const float colorMask[6] = {222, 255, 222, 255, 222, 255};
UIImage *img = [[UIImage alloc] init];
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
[nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault];
[img release];
Ab IOS7:
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.view.backgroundColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
Für alle, die dies in Swift 2.x tun möchten:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
oder Swift 3.x:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
Das scheint zu funktionieren:
@implementation UINavigationBar (custom)
- (void)drawRect:(CGRect)rect {}
@end
navigationController.navigationBar.backgroundColor = [UIColor clearColor];
Nachdem Sie getan haben, was alle anderen oben gesagt haben, d.h .:
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.isTranslucent = true
... meine Navigationsleiste war immer noch weiß . Also habe ich diese Zeile hinzugefügt:
navigationController?.navigationBar.backgroundColor = .clear
... und voila! Das schien den Trick zu tun.
Der folgende Code erweitert die für diesen Thread gewählte oberste Antwort, um den unteren Rand und die Textfarbe zu entfernen:
Die letzten beiden codierten Zeilen dieses Codes legen Transparenz fest. Ich habe mir diesen Code aus diesem Thread geliehen und er hat perfekt funktioniert!
Die "clipsToBounds" -Eigenschaft war der Code, den ich gefunden habe, der die untere Umrandungslinie mit OR ohne Transparenzsatz beseitigt hat (wenn Sie sich also für einen durchgehenden weißen/schwarzen/etc-Hintergrund entscheiden, gibt es noch keinen Grenzlinie).
Die "tintColor" -Linie (2. codierte Zeile) setzt meine Zurück-Schaltfläche 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
let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.lightGray
navigationBarAppearace.barTintColor = UIColor.white
navigationBarAppearace.clipsToBounds = true
navigationBarAppearace.isTranslucent = true
navigationBarAppearace.setBackgroundImage(UIImage(), for: .default)
navigationBarAppearace.shadowImage = UIImage()
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:
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.opaque = YES;
self.navigationController.navigationBar.tintColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.Translucent = true;
Probieren Sie den folgenden Code aus:
self.navigationController.navigationBar.translucent = YES;
für Swift 3.0:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = true
}
Ein anderer Weg, der für mich funktioniert hat, ist UINavigationBar zu subclassieren und die drawRect-Methode leer zu lassen !!
@IBDesignable class MONavigationBar: UINavigationBar {
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}}
Dies funktioniert für Swift 2.0.
navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController!.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.translucent = true
Meinen Sie völlig transparent oder verwenden Sie den durchscheinenden schwarzen Stil der Fotos-App? Letzteres können Sie erreichen, indem Sie die barStyle
-Eigenschaft auf UIBarStyleBlackTranslucent
setzen. Ersteres ... Ich bin mir nicht sicher. Wenn Sie möchten, dass die Elemente weiterhin sichtbar sind, müssen Sie möglicherweise etwas in der Ansichtshierarchie der Leiste herumgraben und die Ansicht mit dem Hintergrund entfernen.
Check RRViewControllerExtension , das für das Erscheinungsbild der UINavigation-Leiste bestimmt ist.
mit RRViewControllerExtension in Ihrem Projekt müssen Sie lediglich überschreiben
-(BOOL)prefersNavigationBarTransparent;
in Ihrem Viewcontroller.
In Swift 4.2
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
(in viewWillAppear) und dann in viewWillDisappear, um es rückgängig zu machen, setzen Sie
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false