Saya menggunakan Xcode 8.0 beta 4.
Dalam versi sebelumnya, UIViewController memiliki metode untuk mengatur gaya status bar
public func preferredStatusBarStyle() -> UIStatusBarStyle
Namun, saya menemukan itu berubah menjadi "Get ONLY varaiable" di Swift 3.
public var preferredStatusBarStyle: UIStatusBarStyle { get }
Bagaimana cara menyediakan gaya untuk digunakan di UIViewController saya?
Jawaban:
[DIPERBARUI] Untuk Xcode 10+ & Swift 4.2+
Ini adalah metode yang disukai untuk iOS 7 dan lebih tinggi
Di aplikasi Anda
Info.plist
, setelView controller-based status bar appearance
keYES
.Override
preferredStatusBarStyle
( Apple docs ) di setiap pengontrol tampilan Anda. Sebagai contoh:Jika Anda telah
preferredStatusBarStyle
mengembalikan gaya bilah status pilihan yang berbeda berdasarkan pada sesuatu yang berubah di dalam pengontrol tampilan Anda (misalnya, apakah posisi gulir atau apakah gambar yang ditampilkan gelap), maka Anda akan ingin memanggilsetNeedsStatusBarAppearanceUpdate()
ketika keadaan itu berubah.iOS sebelum versi 7, metode usang
Apple telah menghentikan ini , sehingga akan dihapus di masa depan. Gunakan metode di atas sehingga Anda tidak perlu menulis ulang ketika versi iOS berikutnya dirilis.
Jika aplikasi Anda akan mendukung Dalam aplikasi Anda
Info.plist
, aturView controller-based status bar appearance
keNO
.Di
appDelegate.swift
,didFinishLaunchingWithOptions
fungsinya, tambahkan:Untuk Pengontrol Navigasi
Jika Anda menggunakan pengontrol navigasi dan Anda ingin gaya bilah status yang disukai dari setiap pengontrol tampilan digunakan dan diatur
View controller-based status bar appearance
keYES
dalam aplikasi Andainfo.plist
sumber
Pembaruan Terbaru (Xcode 10+ / Swift 4.2+)
Artikel ini dibiarkan utuh bagi siapa pun yang mau memahami logika di balik berbagai pendekatan yang ada selama beberapa tahun terakhir. Sementara itu, pada Xcode 10, pendekatan pertama Swift 4.2 sudah usang dan tidak lagi didukung (yaitu tidak akan berlaku jika Anda mencoba menggunakannya). Masih merujuk pada informasi Anda untuk lebih memahami alasan di balik
Plist.info
bendera dan praktik penyesuaian.Klarifikasi penting
Sangat penting untuk memahami dua pendekatan untuk menyesuaikan tampilan status bar. Mereka berbeda dan tidak boleh dicampur.
Pendekatan pertama - satu warna untuk seluruh aplikasi (DIPERKIRAKAN sejak iOS7)
Di info.plist Anda menemukan atau membuat kunci bernama
View controller-based status bar appearance
dan atur ke NO .
Apa itu? Ini pada dasarnya menetapkan pengaturan yang mengatakan bahwa dalam aplikasi Anda, tampilan bilah status tidak ditentukan secara individual oleh setiap pengontrol tampilan . Ini sangat penting untuk dipahami. Ini berarti Anda memiliki pengaturan seragam untuk seluruh aplikasi, untuk semua layar. Ada dua pengaturan:,
default
yang merupakan teks hitam dengan latar belakang putih, ataulightContent
, yang merupakan teks putih dengan latar belakang hitam.Untuk mengatur salah satu dari ini ( satu pengaturan untuk semua layar ):
Dengan cara ini Anda tidak perlu membangun kembali pengaturan ini pada setiap pengontrol tampilan. Namun, Anda selalu dapat menggunakan metode ini untuk mengubah penampilan secara sukarela.
Pendekatan kedua - warna individual untuk setiap pengontrol tampilan
Ini kebalikannya. Untuk membuatnya bekerja, silakan ke info.plist dan atur
View controller-based status bar appearance
ke YA
Dengan cara ini, setiap kali controller tampilan baru terbuka, gaya bilah status diatur secara individual jika Anda memasukkan implementasi ini dalam setiap
UIViewController
instance yang Anda butuhkan:Anda memiliki yang sama seperti di pertama, mengatur gaya gelap atau terang untuk statusbar, masing-masing untuk setiap pengontrol tampilan.
Properti ini diambil oleh UIKit dalam dua skenario:
setNeedsStatusBarAppearanceUpdate()
kode.Dalam kasus terakhir, Anda berhak memanipulasi tampilan statusbar dengan kode berikut:
Lalu, setiap kali Anda menelepon
toggleAppearance()
, perubahan gaya statusbar akan dipicu.Pendekatan ketiga - Retas!
Ada peretasan yang memungkinkan untuk mengakses statusbar secara langsung:
Mengapa hack Jika Anda membutuhkan warna bilah status selain hitam atau putih, Anda menggunakan API tidak berdokumen. Anda mendapatkan
statusBar
objek menggunakan KVC dan mengatur warna latar belakangnya. Objek yang Anda dapatkan dengan cara ini adalahUIStatusBar
, yang berasal dariUIView
dan dengan demikian secara alami mendukungbackgroundColor
properti. Ini kotor, bukan cara hukum, tapi sejauh ini satu-satunya cara untuk mengatur warna khusus untuk statusbar (tidak memperhitungkanUINavigationBar
pendekatan akun , yang memungkinkan untuk menyesuaikan tampilan navbar + statusbar sama sekali). Ini mungkin menyebabkan aplikasi Anda ditolak. Tapi mungkin Anda beruntung. Dan jika Anda, dalam keadaan kompleks tertentu (seperti hierarki bersarang, navigasi anak, dan pengontrol tampilan) ini mungkin satu-satunya cara, atau setidaknya cara yang kurang sulit untuk menyesuaikan tampilan statusbar (misalnya, untuk membuatnya transparan)Xcode 10+, Swift 4.2
Tidak ada alternatif lagi: pengembang harus membiarkan setiap pengontrol tampilan menentukan tampilan statusbar, dengan mengatur bendera ke YA (atau menghilangkan tindakan ini, karena YA secara default) dan mengikuti instruksi di atas.
Bonus
Solusi berbasis peretasan yang mungkin (walaupun tidak dianjurkan) Anda gunakan dalam keadaan yang rumit untuk mengubah tampilan statusbar secara sukarela pada tahap apa pun. Dari segi warna, metode ekstensi berikut ini melakukan apa yang bisa Anda lakukan dengan pendekatan reguler. Anda dapat menyesuaikannya dengan kebutuhan Anda.
sumber
Anda bisa mencoba menimpa nilai yang dikembalikan, daripada mengaturnya. Metode ini dinyatakan sebagai {get}, jadi sediakan saja pengambil:
Jika Anda mengatur ini secara kondisional, Anda harus menelepon
setNeedsStatusBarAppearanceUpdate()
sehingga akan menghidupkan perubahan saat Anda siapsumber
prefersStatusBarHidden
untuk beberapa pandangan Anda. Jika Anda pergi denganUIApplication.shared.statusBarStyle
Anda akan terjebak dengan itu.Swift 3 & 4, iOS 10 & 11, Xcode 9 & 10
Bagi saya, metode ini tidak berfungsi:
ketika saya menggunakan masing-masing view controller, tetapi ini berhasil:
Dalam info.list file, tambahkan baris:
View controller-based status bar appearance
dan atur keNO
Berikutnya di delegasi:
sumber
Jika Anda ingin mengubah
statusBar
warna menjadi putih, untuk semua tampilan yang ada dalam aUINavigationController
, tambahkan ini di dalamnyaAppDelegate
:Kode ini:
tidak bekerja untuk
UIViewControllers
yang terkandung dalamUINavigationController
, karena compiler terlihat untukstatusBarStyle
satuUINavigationController
, bukan untukstatusBarStyle
yangViewControllers
dikandung oleh itu.Semoga ini bisa membantu mereka yang belum berhasil dengan jawaban yang diterima!
sumber
Jika Anda ingin mengubah gaya bilah status kapan saja setelah tampilan muncul, Anda dapat menggunakan ini:
Dalam file info.list tambahkan baris: Lihat tampilan bilah status berbasis pengontrol dan atur ke YES
sumber
If you call this method within an animation block, the changes are animated along with the rest of the animation block.
Xcode 10 atau lebih baru
Diuji dalam Swift 5
Tidak diperlukan kode, cukup ikuti langkah-langkah di bawah ini.
Jangan lupa perubahan info.plist
Jalankan proyek Anda dan periksa.
Proyek saya di swift 5 dan Xcode 10.2 & 11.0
sumber
Anda perlu menambahkan kunci di bawah ini dalam file Info.plist Anda:
View controller-based status bar appearance
dengan nilai boolean diatur keNO
Di kelas appdelegate Anda, dalam
didFinishLaunchingWithOptions
metode sebelum kembali.berubah
backgroundColor
danstatusBarStyle
sesuai kebutuhan.sumber
Anda juga dapat melakukan ini di storyboard
Anda harus melakukan ini untuk setiap pengontrol navigasi yang Anda miliki. Namun, setiap tampilan di bawah pengontrol navigasi akan mengubah semua gaya / warna bilah status tampilan menjadi yang baru saja Anda pilih. Saya menemukan opsi ini lebih baik karena Anda dapat melihat hasil Anda secara instan dan tidak perlu menambahkan baris kode tambahan di setiap pengontrol tampilan.
(Selesai dengan Xcode 8.3.3 di semua proyek Swift)
sumber
View controller-based status bar appearance = NO
dan harus menggunakan hanya gaya terang atau gelap di seluruh aplikasi. Sayang sekali bahwa cara "Tanpa Kode" ini hanya berfungsi di Navigasi Kontroler, Apple harus mempertimbangkan untuk menambahkan bidang lain untuk mengatur opsi ini di dalam instance Lihat Kontrol.Bagi orang yang ingin mengubah bilah status untuk semua viewcontrollers di: iOS 11, solusi Swfit 4/5 cukup mudah.
1) Info.plist tambahkan:
2) Sisi kiri proyek slect XCode> Target > Pilih proyek Anda> Di bawah Umum> Info Penerapan> Pilih Status Bar Style: Light
Jika Anda ingin mengubah bilah status hanya untuk satu viewcontroller , di viewDidLoad tambahkan:
2.1 ) Info.plist
2.2 )
Objective-C (atau reaksi asli) yang berubah dari Delegasi Aplikasi:
1) Info.plist tambahkan:
2) AppDelegate -> didFinishLaunchingWithOptions
Mengubah bilah status tidak berfungsi mencoba melakukan push (pengontrol navigasi), hanya pada penyajian pengendali tampilan secara moderat.
sumber
Langkah pertama Anda perlu menambahkan baris dengan kunci:
View controller-based status bar appearance
dan nilaiNO
keInfo.plist
file. Setelah itu, tambahkan 2 fungsi di controller Anda untuk spesifik hanya controller yang akan berpengaruh:sumber
Cepat 3
Di Info.plist tambahkan baris yang disebut "Lihat tampilan status bar berbasis pengontrol" dan tetapkan nilainya
No
.sumber
Tampaknya ada masalah kecil tentang warna teks bilah status ketika berhadapan dengan bilah navigasi.
Jika Anda ingin tampilan .plist entri tampilan status berbasis pengontrol ditetapkan
YES
, kadang-kadang tidak akan berfungsi ketika Anda memiliki nav bar berwarna.Sebagai contoh:
dan
override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
Kode di atas tidak akan berfungsi bahkan jika Anda telah menetapkan yang berikut di AppDelegate:
UIApplication.shared.statusBarStyle = .lightContent
Bagi mereka yang masih berjuang, tampaknya entah bagaimana menilai apakah bilah status harus terang atau gelap oleh gaya di bilah nav. Jadi, saya berhasil memperbaikinya dengan menambahkan baris berikut di viewWillAppear:
nav?.barStyle = UIBarStyle.black
Ketika gaya bar berwarna hitam, maka itu mendengarkan variabel yang diganti. Semoga ini bisa membantu seseorang :)
sumber
Untuk menambah asnwer hebat dengan @Krunal https://stackoverflow.com/a/49552326/4697535
Jika Anda menggunakan
UINavigationController
, tidakpreferredStatusBarStyle
akan berpengaruh padaUIViewController
.Xcode 10 dan Swift 4.
Tetapkan kebiasaan
UINavigationController
Contoh:
Gunakan ekstensi untuk solusi tingkat aplikasi:
sumber
Xcode 8.3.1, Swift 3.1
Buat entri baru di info.plist "Lihat tampilan bilah status berbasis pengontrol" setel ke "TIDAK".
Buka AppDelegate.swift dan tambahkan baris ini dalam metode "didFinishLaunchingWithOptions":
application.statusBarStyle = .lightContent
sumber
Swift 4+
untuk teks statusbar putih:
sumber
Berikut adalah Panduan / Instruksi Apple tentang perubahan gaya bilah status.
Jika Anda ingin mengatur gaya bilah status, tingkat aplikasi kemudian diatur
UIViewControllerBasedStatusBarAppearance
keNO
dalam.plist
file Anda . Dan diappdelegate
>didFinishLaunchingWithOptions
tambah in mengikuti Anda (secara program Anda dapat melakukannya dari delegasi aplikasi).Tujuan C
Cepat
jika Anda ingin mengatur gaya bilah status, pada tingkat pengontrol tampilan lalu ikuti langkah-langkah ini:
UIViewControllerBasedStatusBarAppearance
keYES
dalam.plist
file, jika Anda perlu mengatur gaya bilah status di level UIViewController saja.Dalam fungsi add viewDidLoad -
setNeedsStatusBarAppearanceUpdate
menimpa preferStatusBarStyle di pengontrol tampilan Anda.
Tujuan C
Cepat
Tetapkan nilai .plist sesuai dengan tingkat pengaturan gaya bilah status.
sumber
Swift 4.0 Silakan gunakan kode ini di "didFinishLaunchingWithOptions launchOptions:" Appdelegate class
sumber
iOS 11.2
sumber
Ini berhasil untuk saya
Atur
View controller-based status bar
penampilan menjadi NO di dalam daftar kemudian InUIViewController
viewDidAppear
baru saja menambahkan baris berikutsumber
cepat 3
jika Lihat tampilan bilah status berbasis pengontrol = YES di Info.plist
kemudian gunakan ekstensi ini untuk semua NavigationController
jika tidak ada UINavigationController dan hanya memiliki UIViewController kemudian gunakan kode di bawah ini:
sumber
Cepat 5
Untuk menambahkan lebih detail untuk jawaban PRAVEEN di https://stackoverflow.com/a/40066798/2082851 , saya ingin memberikan implementasi saya. Ini mendukung fleksibilitas untuk menyesuaikan bilah status setiap pengontrol.
Secara keseluruhan, kami akan membuat
BaseViewController
yang menanganistatusBarStyle
properti dalam semua kasus. Saat Anda membuat pengontrol baru, jadikan sebagai subkelas pengontrol dasar ini.Kapan pun Anda ingin mengubah tampilan status, Anda hanya perlu memperbarui properti ini. Gaya bilah status akan segera diperbarui.
Penerapan
Demo
2.
UINavigationController
Sebab
UINavigationController
, ini adalah kasus khusus, yang dapat Anda ikuti salah satu solusi:Solusi A: Ganti dengan pengiriman pesan
Karena UINavigationController adalah
NSObject
dan mewarisi dariObjectiveC
, metodenya adalahmessage dispatch
dan Anda dapat menimpanya.Solusi B: Buat
UINavigationController
subkelasJika Anda sudah memiliki kebiasaan
UINavigationController
(yang biasanya perlu mengontrol lebih banyak persyaratan), ini adalah solusi terbaik untuk Anda.sumber
Anda dapat menggunakan properti bool bernama "shouldStatusBarDark" untuk mengganti warna bilah status Anda. Dan Anda juga dapat memperbarui nilainya untuk mengubah warna bilah status saat Anda menggulir.
sumber
Sebagian besar jawaban ini adalah hal yang sama hash, tetapi tidak ada yang benar-benar membahas layar peluncuran untuk saya ketika menggunakan latar belakang gelap.
Saya menyiasatinya dengan yang berikut ini
info.plist
yang menghasilkan status bar cahaya gaya.sumber
Jika Anda menerima peringatan: Setter untuk 'statusBarStyle' sudah tidak digunakan lagi di iOS 9.0: Gunakan - [UIViewController preferStatusBarStyle] , lalu untuk mengatur bilah status ke terang atau gelap gunakan kode berikut:
Ini tidak akan membuat navBar Anda mengubahnya, ini murni menunjukkan gaya dan karenanya mengubah bilah status sesuai.
NB. Anda perlu memastikan bahwa Anda mengatur di info.plist Anda.
sumber
Jika Anda menggunakan presentasi modal, Anda perlu mengatur:
sumber
Di iOS 13 Anda dapat menggunakan
.darkContent
UIStatusBarStyle
properti untuk menampilkan bilah status gelapsumber
Jika Anda masih tidak dapat mengubah basis gaya bar status pada metode
Anda dapat mencoba menggunakan metode ini:
sumber
Untuk tujuan C cukup tambahkan baris ini di aplikasi Anda metode didFinishLaunch
sumber
menggunakan WebkitView
Swift 9.3 iOS 11.3
sumber