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

65voto

pxpgraphics Punkte 1337

Gewünscht wurde die Hinzufügung der Swift-Version von Serhii's Antwort. Ich habe eine UIBarExtension.swift mit folgendem Inhalt erstellt:

import Foundation
import UIKit

extension UINavigationBar {
    func hideBottomHairline() {
        self.hairlineImageView?.isHidden = true
    }

    func showBottomHairline() {
        self.hairlineImageView?.isHidden = false
    }
}

extension UIToolbar {
    func hideBottomHairline() {
        self.hairlineImageView?.isHidden = true
    }

    func showBottomHairline() {
        self.hairlineImageView?.isHidden = false
    }
}

extension UIView {
    fileprivate var hairlineImageView: UIImageView? {
        return hairlineImageView(in: self)
    }

    fileprivate func hairlineImageView(in view: UIView) -> UIImageView? {
        if let imageView = view as? UIImageView, imageView.bounds.height <= 1.0 {
            return imageView
        }

        for subview in view.subviews {
            if let imageView = self.hairlineImageView(in: subview) { return imageView }
        }

        return nil
    }
}

24voto

Jakub Průša Punkte 2095

Einfache Lösung in Swift

   let navigationBar = self.navigationController?.navigationBar
    navigationBar?.setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    navigationBar?.shadowImage = UIImage()

19voto

Gagandeep Gambhir Punkte 3733

Kann auch im Storyboard ausgeblendet werden (funktioniert mit Xcode 10.1)

Durch Hinzufügen des Laufzeitattributs: hidesShadow - Boolean - True

Bildbeschreibung hier eingeben

19voto

glotcha Punkte 524

Ab iOS 13 gibt es eine System-API zum Setzen oder Entfernen des Schattens

UIKit verwendet die Eigenschaften shadowImage und shadowColor, um das Aussehen des Schattens zu bestimmen. Wenn shadowImage nil ist, zeigt die Leiste einen Standard-Schatten an, der entsprechend dem Wert in der shadowColor-Eigenschaft getönt ist. Wenn shadowColor nil ist oder die Farbe clearColor enthält, wird kein Schatten angezeigt.

    let appearance = UINavigationBarAppearance()
    appearance.shadowImage = nil
    appearance.shadowColor = nil
    navigationController.navigationBar.standardAppearance = appearance

https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage

16voto

samwize Punkte 23381

Nachdem ich die Antwort von Serhil studiert hatte, habe ich eine Pod UINavigationBar+Addition erstellt, die die Haarlinie einfach verstecken kann.

#import "UINavigationBar+Addition.h"

- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationBar *navigationBar = self.navigationController.navigationBar;
    [navigationBar hideBottomHairline];
}

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