Untuk iOS 13:
Gunakan .shadowColor
properti
Jika properti ini nihil atau berisi warna jernih, bilah tidak menampilkan bayangan
Contohnya:
let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence
Untuk iOS 12 dan di bawah ini:
Untuk melakukan ini, Anda harus mengatur gambar bayangan kustom. Tetapi untuk gambar bayangan yang ditampilkan, Anda juga perlu mengatur gambar latar belakang khusus, kutipan dari dokumentasi Apple:
Agar gambar bayangan khusus ditampilkan, gambar latar belakang khusus juga harus diatur dengan metode setBackgroundImage (_: for :). Jika gambar latar belakang default digunakan, maka gambar bayangan default akan digunakan terlepas dari nilai properti ini.
Begitu:
let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
for: .default)
navigationBar.shadowImage = UIImage()
Di atas adalah satu-satunya cara "resmi" untuk menyembunyikannya. Sayangnya, ini menghilangkan tembus bilah.
Saya tidak ingin gambar latar belakang, hanya warna
Anda memiliki opsi itu:
Warna solid, tidak tembus cahaya:
navigationBar.barTintColor = UIColor.redColor()
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
Buat gambar latar kecil dengan warna dan gunakan.
Gunakan metode 'retas' yang dijelaskan di bawah ini. Itu juga akan membuat bar tembus.
Bagaimana agar bilah tetap tembus?
Untuk menjaga transparansi Anda membutuhkan pendekatan lain, itu terlihat seperti retasan tetapi bekerja dengan baik. Bayangan yang kami coba hapus adalah garis rambut di UIImageView
suatu tempat di bawah UINavigationBar
. Kita dapat menemukannya dan menyembunyikan / menampilkannya saat dibutuhkan.
Instruksi di bawah ini menganggap Anda perlu garis rambut disembunyikan hanya dalam satu pengontrol UINavigationController
hierarki Anda .
Nyatakan variabel instan:
private var shadowImageView: UIImageView?
Tambahkan metode yang menemukan bayangan ini (garis rambut) 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
}
Tambahkan / edit viewWillAppear/viewWillDisappear
metode:
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
}
Metode yang sama juga harus bekerja untuk UISearchBar
garis rambut, dan (hampir) hal lain yang perlu Anda sembunyikan :)
Terima kasih banyak kepada @Leo Natan untuk ide aslinya!