Für iOS 13:
Verwenden Sie die .shadowColor
Eigenschaft
Wenn diese Eigenschaft Null ist oder die klare Farbe enthält, zeigt der Balken keinen Schatten an
Zum Beispiel:
let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence
Für iOS 12 und niedriger:
Dazu sollten Sie ein benutzerdefiniertes Schattenbild festlegen. Damit das Schattenbild angezeigt wird, müssen Sie jedoch auch ein benutzerdefiniertes Hintergrundbild festlegen. Zitat aus der Apple-Dokumentation:
Damit ein benutzerdefiniertes Schattenbild angezeigt wird, muss auch ein benutzerdefiniertes Hintergrundbild mit der Methode setBackgroundImage (_: for :) festgelegt werden. Wenn das Standardhintergrundbild verwendet wird, wird das Standardschattenbild unabhängig vom Wert dieser Eigenschaft verwendet.
Damit:
let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
for: .default)
navigationBar.shadowImage = UIImage()
Oben ist der einzige "offizielle" Weg, es zu verstecken. Leider wird die Transluzenz von Bar entfernt.
Ich möchte kein Hintergrundbild, nur Farbe
Sie haben folgende Möglichkeiten:
Einfarbig, keine Transluzenz:
navigationBar.barTintColor = UIColor.redColor()
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
Erstellen Sie ein kleines, mit Farbe gefülltes Hintergrundbild und verwenden Sie es.
Verwenden Sie die unten beschriebene 'hacky'-Methode. Es wird auch Balken durchscheinend halten.
Wie hält man den Balken durchscheinend?
Um die Transluzenz zu erhalten, benötigen Sie einen anderen Ansatz. Es sieht aus wie ein Hack, funktioniert aber gut. Der Schatten, den wir entfernen wollen, ist UIImageView
irgendwo darunter ein Haaransatz UINavigationBar
. Wir können es finden und bei Bedarf verstecken / zeigen.
In den folgenden Anweisungen wird davon ausgegangen, dass der Haaransatz nur in einem Controller Ihrer UINavigationController
Hierarchie versteckt sein muss .
Instanzvariable deklarieren:
private var shadowImageView: UIImageView?
Methode hinzufügen, die diesen Schatten findet (Haaransatz) UIImageView:
private func findShadowImage(under view: UIView) -> UIImageView? {
if view is UIImageView && view.bounds.size.height <= 1 {
return (view as! UIImageView)
}
for subview in view.subviews {
if let imageView = findShadowImage(under: subview) {
return imageView
}
}
return nil
}
viewWillAppear/viewWillDisappear
Methoden hinzufügen / bearbeiten :
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if shadowImageView == nil {
shadowImageView = findShadowImage(under: navigationController!.navigationBar)
}
shadowImageView?.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
shadowImageView?.isHidden = false
}
Die gleiche Methode sollte auch für den UISearchBar
Haaransatz funktionieren und (fast) alles andere, was Sie verstecken müssen :)
Vielen Dank an @Leo Natan für die ursprüngliche Idee!