it-swarm.com.de

Machen Sie UINavigationBar transparent

Wie machen Sie eine UINavigationBar transparent ? Obwohl ich möchte, dass die Bar-Elemente sichtbar bleiben.

218
quano

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

Diskussion

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.

607

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];
29
Alex Stanciu

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];
23
Damien Romito

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
14
fuzz

Das scheint zu funktionieren:

@implementation UINavigationBar (custom)
- (void)drawRect:(CGRect)rect {}
@end

navigationController.navigationBar.backgroundColor = [UIColor clearColor];
10
quano

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. 

8
Clay Ellis

Der folgende Code erweitert die für diesen Thread gewählte oberste Antwort, um den unteren Rand und die Textfarbe zu entfernen:

  1. Die letzten beiden codierten Zeilen dieses Codes legen Transparenz fest. Ich habe mir diesen Code aus diesem Thread geliehen und er hat perfekt funktioniert!

  2. 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).

  3. Die "tintColor" -Linie (2. codierte Zeile) setzt meine Zurück-Schaltfläche auf hellgrau

  4. 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()
    
5
Dave G

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];
5
Sander

C #/Xamarin-Lösung

NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default);
NavigationController.NavigationBar.ShadowImage = new UIImage();
NavigationController.NavigationBar.Translucent = true;
2
Mark Moeykens

Probieren Sie den folgenden Code aus:

self.navigationController.navigationBar.translucent = YES;
2
Russian

für Swift 3.0:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
}
2
Wilson

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
}}
1
M.Othman

Dies funktioniert für Swift 2.0. 

navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
navigationController!.navigationBar.shadowImage = UIImage()
navigationController!.navigationBar.translucent = true
0
Chris3643

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.

0

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.

 navigation bar tranparent

0
Roen

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
0
auspicious99