İOS 13 için:
.shadowColor
Özelliği kullanın
Bu özellik sıfırsa veya açık renk içeriyorsa, çubuk gölge göstermez
Örneğin:
let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence
İOS 12 ve önceki sürümler için:
Bunu yapmak için özel bir gölge görüntüsü ayarlamanız gerekir. Ancak gölge görüntünün gösterilmesi için ayrıca özel bir arka plan görüntüsü ayarlamanız gerekir, Apple'ın belgelerinden alıntı yapın:
Özel bir gölge görüntüsünün gösterilmesi için, setBackgroundImage (_: for :) yöntemiyle özel bir arka plan görüntüsü de ayarlanmalıdır. Varsayılan arka plan görüntüsü kullanılırsa, bu özelliğin değerine bakılmaksızın varsayılan gölge görüntüsü kullanılır.
Yani:
let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
for: .default)
navigationBar.shadowImage = UIImage()
Yukarıda gizlemenin tek "resmi" yolu. Ne yazık ki, çubuğun yarı saydamlığını kaldırır.
Arka plan resmi istemiyorum, sadece renk
Bu seçeneklere sahipsiniz:
Düz renk, yarı saydamlık yok:
navigationBar.barTintColor = UIColor.redColor()
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
Renklerle dolu küçük bir arka plan görüntüsü oluşturun ve kullanın.
Aşağıda açıklanan 'hacky' yöntemini kullanın. Ayrıca çubuğu yarı saydam tutacaktır.
Çubuğu yarı saydam tutmak nasıl?
Yarı saydamlığı korumak için başka bir yaklaşıma ihtiyacınız var, bir kesmek gibi görünüyor ama iyi çalışıyor. Kaldırmaya çalıştığımız gölge, UIImageView
altında bir yerde bir saç çizgisidir UINavigationBar
. Gerektiğinde bulabilir ve gizleyebilir / gösterebiliriz.
Aşağıdaki talimatlarda, UINavigationController
hiyerarşinizin yalnızca bir denetleyicisinde gizli saç çizgisine ihtiyacınız olduğu varsayılmaktadır .
Örnek değişkeni bildir:
private var shadowImageView: UIImageView?
Bu gölgeyi bulan yöntemi ekle (saç çizgisi) 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
Yöntem ekleme / düzenleme :
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
}
Aynı yöntem UISearchBar
saç çizgisi için de çalışmalı ve (neredeyse) saklamanız gereken başka bir şey var :)
Orijinal fikir için @Leo Natan'a çok teşekkürler!