536 Stimmen

Wie man die 1px untere Linie der UINavigationBar ausblendet

Ich habe eine App, bei der die Navigationsleiste manchmal mit dem Inhalt verschmelzen muss.

Weiß jemand, wie man diese lästige kleine Leiste loswerden oder ihre Farbe ändern kann?

Auf dem Bild unten habe ich die Situation - ich spreche von dieser 1px hohen Linie unter "Root View Controller"

Bildbeschreibung hier eingeben

1voto

andrewlundy Punkte 823

Es ist sehr wichtig, navigationController?.navigationBar.setValue(true, forKey: "hidesShadow") nicht zu verwenden, da Apple jederzeit den Key-Pfad "hidesShadow" entfernen könnte. Wenn sie dies tun würden, würde jede App, die diesen Aufruf verwendet, abstürzen. Da du nicht direkt auf die API einer Klasse zugreifst, ist dieser Aufruf anfällig für App Store-Ablehnung.

Ab iOS 13 kannst du zur Effizienzsteigerung folgendes tun:

navigationBar.standardAppearance.shadowColor = nil

1voto

Scott Punkte 63

Hier ist eine Möglichkeit, dies ohne Verwendung von Bildern zu tun, dies ist der einzige Weg, der für mich funktioniert hat:

self.navigationController.navigationBar.layer.shadowOpacity = 0;

Leider müssen Sie dies in jeder Datei tun, in der Sie möchten, dass die Linie nicht erscheint. Auf diese Weise können Sie es nicht im appDelegate tun.

Bearbeiten:

Das Setzen der shadowColor auf nil ist nicht erforderlich, dies ist die einzige Zeile, die Sie benötigen werden.

1voto

D6mi Punkte 573

Eine sehr wichtige Anmerkung hier - es ist viel flexibler, das Aussehen des UIViewController's navigationItem zu ändern als die navigationBar direkt.

Warum fragst du?

Aus dem einfachen Grund, dass das navigationItem an einen einzelnen UIViewController gebunden ist und den Zustand der navigationBar für genau diesen bestimmten UIViewController darstellt. Das ist wichtig, da du die Navigationsleistenänderungen zwischen verschiedenen Ansichtscontrollern innerhalb von viewWillAppear (oder ähnlichem) nicht behandeln musst, wie es der Fall wäre, wenn du die navigationBar veränderst; die ja, erinnere dich daran, zwischen allen Ansichtscontrollern eines bestimmten Navigationsstapels (UINavigationController) geteilt wird und eine Änderung an einer Stelle für alle Ansichtscontroller bis zum Stapel gilt.

Du setzt einfach das richtige UINavigationBarAppearance für einen bestimmten Ansichtscontroller und UIKit wird das Erscheinungsbild der Navigationsleiste korrekt aktualisieren, je nachdem, welcher Ansichtscontroller derzeit der oberste Ansichtscontroller im Navigationsstapel ist.

navigationItem.standardAppearance` = `UINavigationBarAppearance()

1voto

easytarget Punkte 722

Ich bin auf das gleiche Problem gestoßen und keine der Antworten war wirklich zufriedenstellend. Hier ist mein Ansatz für Swift3:

func hideNavigationBarLine() {
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
}

Rufen Sie dies einfach innerhalb von viewDidLoad() auf.

1voto

Vaibhav Gaikwad Punkte 356

Ziel-C-Antwort auf die obige Frage

// Entfernen der 1px Linie der Navigationsleiste

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setTranslucent:NO];
[[UINavigationBar appearance] setTintColor:[UIColor deineFarbe]];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X