So entfernen Sie die untere Linie der UINavigationBar: 3 funktionierende Methoden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum diese verdammte Linie Entwicklern den Schlaf raubt?

\n\n

Wenn Sie jemals versucht haben, das Design einer App „wie in Apple Music“ oder „wie in Telegram“ zu gestalten – sind Sie bestimmt darauf gestoßen. Sie erstellen eine perfekte UINavigationBar mit einem schönen Farbverlauf, Transparenz oder einer benutzerdefinierten Farbe, starten den Simulator – und sehen diese dünne graue oder schwarze Linie (1 Pixel) unten. Sie sieht aus wie ein Artefakt, wie Schmutz auf Glas. Und ja, sie nervt.

\n\n

Diese 1px-Linie ist kein Fehler, sondern ein Feature. Es ist shadowImage + backgroundImage, die Apple aus irgendeinem Grund standardmäßig belassen hat. Selbst in iOS 17 erscheint sie noch, wenn Sie dem System nicht sagen: „Hey, entferne das“. Die Frage auf Stack Overflow zu diesem Thema hat tausende Aufrufe und Dutzende Antworten. Das zeigt, dass das Thema wirklich schmerzhaft ist.

\n\n

In diesem Artikel zeige ich 3 funktionierende Ansätze in Swift, um die untere Linie der UINavigationBar auszublenden. Wir werden sowohl alte Methoden (iOS 13-) als auch moderne über UINavigationBarAppearance behandeln. Los geht's!

\n\n

Methode 1: Klassiker – über backgroundImage und shadowImage

\n\n

Die älteste und bewährteste Methode. Sie funktioniert seit iOS 5 (ja, aus der Zeit, als Skeuomorphismus noch in Mode war). Die Idee ist einfach: Wir setzen ein leeres Bild als Hintergrund und Schatten.

\n\n

Schritt 1: Ein leeres Bild erstellen

\n\n
extension UIImage {\n    static func pixelImage(withColor color: UIColor = .clear) -> UIImage {\n        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)\n        UIGraphicsBeginImageContext(rect.size)\n        color.setFill()\n        UIRectFill(rect)\n        let image = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return image ?? UIImage()\n    }\n}
\n\n

Schritt 2: Auf die navigationBar anwenden

\n\n
func hideBottomLine() {\n    let emptyImage = UIImage.pixelImage()\n    navigationController?.navigationBar.setBackgroundImage(emptyImage, for: .default)\n    navigationController?.navigationBar.shadowImage = emptyImage\n}
\n\n

Vorteile: Funktioniert überall, sogar auf alten iOS-Versionen.
\nNachteile: Funktioniert nicht immer korrekt mit scrollEdgeAppearance und großen Titeln. Wenn Sie eine UISearchBar haben – die Linie kann zurückkommen.

\n\n

Methode 2: Modern – über UINavigationBarAppearance (iOS 13+)

\n\n

Ab iOS 13 hat Apple UINavigationBarAppearance eingeführt. Dies ist ein einheitliches Objekt, das alle Zustände verwaltet: Standard, Scrollen und Kompakt. Ideal für diejenigen, die „einmal einstellen und vergessen“ wollen.

\n\n

Vollständiges Beispiel für UIViewController

\n\n
func setupTransparentNavigationBar() {\n    let appearance = UINavigationBarAppearance()\n    appearance.configureWithTransparentBackground()\n    appearance.backgroundColor = .clear\n    appearance.shadowColor = .clear  // entfernt die Linie\n    \n    navigationController?.navigationBar.standardAppearance = appearance\n    navigationController?.navigationBar.scrollEdgeAppearance = appearance\n    navigationController?.navigationBar.compactAppearance = appearance\n}
\n\n

Beachten Sie: shadowColor = .clear – das ist die entscheidende Zeile. Wenn Sie sie nicht schreiben, bleibt die Linie. configureWithTransparentBackground() macht den Hintergrund transparent, berührt aber den Schatten nicht.

\n\n

Wenn Sie einen farbigen Hintergrund, aber keine Linie möchten:

\n\n
let appearance = UINavigationBarAppearance()\nappearance.configureWithOpaqueBackground()\nappearance.backgroundColor = .systemBlue\nappearance.shadowColor = .clear\n\nnavigationController?.navigationBar.standardAppearance = appearance\nnavigationController?.navigationBar.scrollEdgeAppearance = appearance
\n\n

Vorteile: Sauberer Code, leicht kombinierbar mit großen Titeln und Suche.
\nNachteile: Nur iOS 13+. Wenn das Projekt iOS 12 unterstützt – müssen Sie

Blogs

Buchempfehlungen