Saya memiliki aplikasi yang terkadang membutuhkan bilah navigasi untuk berbaur dengan konten.
Adakah yang tahu cara menyingkirkan atau mengubah warna bar kecil yang menyebalkan ini?
Pada gambar di bawah ini situasi yang saya miliki - saya sedang berbicara tentang garis ketinggian 1px di bawah "Root View Controller"
ios
objective-c
swift
ipad
uinavigationbar
Szymon Kuczur
sumber
sumber
Jawaban:
Untuk iOS 13:
Gunakan
.shadowColor
propertiContohnya:
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:
Begitu:
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:
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 bawahUINavigationBar
. 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:
Tambahkan metode yang menemukan bayangan ini (garis rambut)
UIImageView:
Tambahkan / edit
viewWillAppear/viewWillDisappear
metode: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!
sumber
UINavigationBar
properti:clipsToBounds = YES
clipsToBounds = YES
bekerja seperti pesona! Terima kasih!viewWillAppear
dipanggil kita tidak bisa mendapatkanshadowImageView
Di bawah ini dapat membantu!
Cepat:
Sasaran C:
sumber
Jika Anda hanya ingin menggunakan warna bilah navigasi yang solid dan mengaturnya di storyboard Anda, gunakan kode ini di
AppDelegate
kelas Anda untuk menghapus batas 1 piksel melalui proxy penampilan:sumber
Coba ini:
Gambar di bawah ini memiliki penjelasan (iOS7 NavigationBar):
Dan periksa pertanyaan SO ini: iOS7 - Ubah warna perbatasan UINavigationBar
sumber
Ingin menambahkan versi Swift dari jawaban Serhii. Saya membuat
UIBarExtension.swift
dengan yang berikut:sumber
Cara cepat untuk melakukannya:
sumber
Solusi sederhana dalam cepat
sumber
Setelah mempelajari jawaban dari Serhil, saya membuat pod UINavigationBar + Addition yang dapat dengan mudah menyembunyikan garis rambut.
sumber
Di Swift 3.0
Edit Anda
AppDelegate.swift
dengan menambahkan kode berikut ke fungsi aplikasi Anda:sumber
Pada iOS 13 ada sistem API untuk mengatur atau menghapus bayangan
https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage
sumber
UINavigationBarAppearance
header !! Saya tidak akan pernah menemukannya. Terima kasih, ini menyelesaikan masalah saya 100%Dapat juga disembunyikan dari Storyboard (mengerjakan Xcode 10.1)
Dengan menambahkan atribut runtime: hidesShadow - Boolean - True
sumber
solusi pxpgraphics ' diperbarui untuk Swift 2.0
sumber
UINavigationController().navigationBar/toolbar.hide/showBottomHairline()
maka tidak? Saya mencoba ini tetapi tidak berhasil. Apakah saya tidak mengerti dengan benar?Swift 4 // untuk menyembunyikan garis bayangan bar navigasi
sumber
Saya menggunakan ekstensi UINavigationBar yang memungkinkan saya untuk menyembunyikan / memperlihatkan bayangan itu menggunakan API UIAppearance atau memilih bilah navigasi yang harus menyembunyikan / memperlihatkan bayangan itu menggunakan Storyboard (atau kode sumber). Ini ekstensi:
Sekarang, untuk menonaktifkan bayangan di semua bilah navigasi yang harus Anda gunakan:
Atau Anda dapat mengaktifkan / menonaktifkan perilaku ini menggunakan storyboard:
sumber
flatAssociatedObjectKey
sebagai int unik (diperlakukan sebagai penunjuk) untuk mengidentifikasi objek terkait Anda. Di sini ditentukan oleh alamat memori var pribadi. Saya memperbarui respons untuk menambahkan var ini. Lihat nshipster.com/associated-objects untuk info lebih lanjut.translucent
ke falseSwift 4 Diuji SATU LINE SOLUSI
Di
Viewdidload()
Setel nilai kerusakan pengontrol Navigasi milik true untuk kunci "hidesShadow"sumber
Swift taruh ini
di
sumber
Opsi lain jika Anda ingin mempertahankan transparansi dan Anda tidak ingin mensubklas setiap
UINavigationController
dalam aplikasi Anda:sumber
sumber
Solusi dalam Swift 4.2:
Cukup taruh fungsi ini di Viewcontroller pertama dan panggil masuk
viewdidload
sumber
Di iOS8, jika Anda mengatur
UINavigationBar.barStyle
untuk,.Black
Anda dapat mengatur latar belakang bilah sebagai warna polos tanpa batas.Dalam Swift:
sumber
Solusi dua baris yang bekerja untuk saya. Coba tambahkan ini dalam metode ViewDidLoad:
sumber
Inilah solusi yang sangat sederhana:
sumber
Solusi sederhana - Swift 5
Buat ekstensi:
Tambahkan ini ke
viewDidLoad()
:sumber
Untuk pengguna iOS 9, ini berhasil bagi saya. tambahkan saja ini:
sumber
Masalah dengan pengaturan gambar latar belakang adalah menghapus kabur. Anda dapat menghapusnya tanpa mengatur gambar latar belakang. Lihat jawaban saya di sini .
sumber
Anda harus menambahkan tampilan ke bagian bawah UISearchBar
sumber
Saya tahu ini adalah utas lama, tetapi saya menemukan solusi yang bekerja sangat baik:
Subkelas UINavigationBar. Di subkelas UINavigationBar Anda, ganti didAddSubview dengan kode berikut:
sumber
Saya Baru saja membuat ekstensi untuk ini ... Maaf tentang pemformatan (ini adalah jawaban pertama saya).
Pemakaian:
Perpanjangan:
sumber
Di dalam AppDelegate , ini secara global mengubah format NavBar:
Belum berhasil menerapkan sesuatu yang berbeda pada VC tertentu, tetapi ini akan membantu 90% orang
sumber
sumber