Setelah membaca semua saran, dan mencoba beberapa hal, saya bisa membuatnya bekerja untuk viewcontrollers tertentu menggunakan langkah-langkah berikut:
Langkah pertama:
Buka info.plist Anda dan masukkan kunci baru bernama " Lihat tampilan status berbasis pengontrol " ke NO
Langkah Kedua (Hanya penjelasan, tidak perlu menerapkan ini):
Biasanya kami menempatkan kode berikut dalam aplikasi (_: didFinishLaunchingWithOptions :) metode AppDelegate,
Cepat 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Cepat 3
UIApplication.shared.statusBarStyle = .lightContent
tapi itu mempengaruhi statusBarStyle
semua ViewControllers.
Jadi, bagaimana agar ini berfungsi untuk ViewControllers tertentu - Langkah Terakhir:
Buka file viewcontroller di mana Anda ingin mengubah statusBarStyle
dan memasukkan kode berikutviewWillAppear()
,
Cepat 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Cepat 3
UIApplication.shared.statusBarStyle = .lightContent
Juga, terapkan viewWillDisappear()
metode untuk viewController tertentu dan letakkan baris kode berikut,
Cepat 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Cepat 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Langkah ini pertama-tama akan mengubah statusBarStyle
untuk viewcontroller tertentu dan kemudian mengubahnya kembali default
ketika viewcontroller tertentu menghilang. Tidak menerapkan viewWillDisappear()
akan mengubah statusBarStyle
secara permanen ke nilai baru yang ditentukanUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
file info.plist, "Lihat tampilan status bar berbasis-controller = TIDAK" akan menyebabkan status bar menjadi tersembunyi.UIStatusBarStyle.Default
menggunakanviewWillDisappear()
, Anda harus menggunakanviewWillAppear()
untuk menginisialisasi, daripadaviewDidLoad()
.... jika Anda kembali ke tampilan itu tanpa harus memuat ulang, Anda tidak akan melihat apa yangStatusBarStyle
Anda harapkan.UIApplication.shared.statusBarStyle = .lightContent
(Per 20 September 2019)
Swift 5 , Swift 4.2 , Swift 4
sumber
super.viewWillAppear
jika Anda menyalin dan menempelkan kode iniUIApplication.shared.statusBarStyle = .lightContent
hasil dalam peringatan kompiler ini: Setter untuk 'statusBarStyle' sudah tidak digunakan lagi di iOS 9.0: Gunakan - [UIViewControllerSolusi Swift 4.2 dengan NavigationController
Langkah pertama:
Buka info.plist Anda dan masukkan kunci baru bernama " Lihat tampilan status berbasis pengontrol " atau
UIViewControllerBasedStatusBarAppearance
ke YA untuk membiarkan setiap VC menggunakan properti status mereka sendiri.Tahap kedua
Di setiap VC, ganti propertiStatusBarStyle yang disukai seperti ini:
Langkah terakhir
Menimpa preferredStatusBarStyle properti di kustom NavigationController kelas Anda:
sumber
Saya mengikuti tutorial ini dan itu berhasil untuk saya. Namun, saya tidak yakin apakah ada peringatan.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
kefalse
.AppDelegate.swift
, yang berisididFinishLaunchingWithOptions
, atur warna yang Anda inginkan.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Pembaruan Swift 3 *
UIApplication.shared.statusBarStyle = .lightContent
sumber
UIApplication.sharedApplication().statusBarHidden = false
ke AppDelegate.swift didFinishLauchingWithOptionsAda satu miliar jawaban di sini jadi saya pikir mengapa tidak menambahkan yang lain dalam bentuk ekstensi (dengan bantuan dari @ Cœur)
Cepat 3
Perpanjangan:
Penerapan:
sumber
Di Info.plist Anda, Anda perlu menentukan tampilan status bar berbasis pengontrol untuk nilai apa pun.
Jika Anda mendefinisikannya YA maka Anda harus mengganti fungsi preferStatusBarStyle di setiap pengontrol tampilan.
Jika Anda mendefinisikannya TIDAK maka Anda dapat mengatur gaya di AppDelegate menggunakan
sumber
setStatusBarStyle
dihentikan di iOS 9.0sumber
valueForKey("statusBar")
mungkin tidak sesuai dengan pedoman AppleCepat 3
Itulah solusi untuk mengatur warna latar belakang bilah status untuk pengontrol tampilan tertentu.
sumber
SWIFT 2
Saya berhasil mengubah tampilan latar belakang bilah status dengan menambahkan yang berikut di viewWillAppear saya:
sumber
Menerapkan
preferredStatusBarStyle
seperti yang Anda sebutkan dan panggilanself.setNeedsStatusBarAppearanceUpdate()
diViewDidLoad
dan juga dalam Info.plist setUIViewControllerBasedStatusBarAppearance
keYES
(IniYES
secara default)Tidak jelas mengapa itu tidak berfungsi. Saya perlu memeriksa kode. Salah satu saran lainnya adalah masuk dengan kode yang berfungsi
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
dan ubah ini ke default ketika Anda melihat menghilangviewWillDisappear
.sumber
untuk cepat 3
. daftar
AppDelegate.swift
sumber
Dalam situasi saya, saya menggunakan papan cerita untuk mengatur pengontrol tampilan saya. Saya ingin mengubah semua gaya bilah status.
Anda dapat melihat pada gambar di bawah ini.
Stars
View Controller adalah aCPBaseNavigationController
, danCPBaseNavigationController
merupakan subclass dariUINavigationController
.Saya mencoba melakukan setps berikutnya:
Dalam
AppDelegate.swift
funcdidFinishLaunchingWithOptions
, tambahkantetapi tidak ada efek.
Di StoryBoard, cari
Base Tab BarController
(gambar di atas). PilihAttributes Inspector
, ubahSattus Bar
atribut menjadiLight Content
.begitu buruk, tidak ada efek.Terakhir saya mendapatkannya. Di pengontrol navigasi kustom saya
CPBaseNavigationController
, tambahkan funcpreferredStatusBarStyle
Itu bekerja dengan baik!
Selain itu,
statusBarStyle
usang dalam 9.0, Anda dapat menggunakan-[UIViewController preferredStatusBarStyle]
.sumber
Bekerja untuk Aplikasi Berbasis Navigasi
sumber
Semuanya jauh lebih mudah di Swift 3.0 Xcode 8
Menggunakan kode di bawah ini dalam file App Delegate, setelahnya
masukkan ini:
sumber
Cepat 3
sumber
Swift 4 Untuk ViewController tertentu tanpa navigasiViewController tertanam, tambahkan saja ini ke file ViewController Anda.
sumber
Cara lain yang sangat mudah untuk membuat pekerjaan ini hanya dengan membuat ekstensi kelas UINavigationController.
Karena mengganti
preferredStatusBarStyle:
metode tidak akan bekerja KECUALI kita melakukannya di dalam kelas UINavigationController.sumber
Saya telah menetapkan warna tertentu (dalam format RGB) menggunakan kode di bawah ini dalam
App Delegate
file:Anda juga perlu menambahkan kunci di bawah ini dalam
Info.plist
file:Lihat tampilan bilah status berbasis pengontrol dengan nilai boolean diatur ke NO
sumber
Saya dapat menyarankan Anda cara yang lebih sederhana,
Ini bekerja untuk saya di iOS 10.1.
Tujuan C
Cepat
Saya terkejut tidak ada yang menunjukkan ini. Selamat menikmati :)
sumber
Saya punya masalah dengan yang ini. Saya tidak benar-benar merasa senang tentang perubahan warna bilah status secara global dalam tampilan memang muncul dan kemudian mengubahnya kembali pada tampilan menghilang seperti jawaban yang diterima. Percaya atau tidak, Anda bisa membuatnya bekerja dengan mengabaikan
preferredStatusBarStyle
pengontrol tampilan yang Anda inginkan. Setelah banyak waktu inilah yang saya lakukan untuk membuatnya bekerja:info.plist
ke YES.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
ke Ya itu.Juga jika Anda memiliki pengendali tampilan tertanam, seperti pada pengontrol navigasi misalnya, ia akan meminta pengontrol tampilan paling atas untuk gaya bar status. Mengganti
childViewControllerForStatusBarStyle
dan melewati pengontrol tampilan tertanam seharusnya berfungsi tetapi tidak bagi saya. Jadi saya baru saja mengembalikan bilah status pengendali tampilan tersemat yang disukai sebagai gaya bilah status yang disukai. Sesuatu seperti ini:sumber
UINavigationController
dan menimpachildViewControllerForStatusBarStyle
var di sana, kembaliself.topViewController
.Dalam Swift 4 atau 4.2
Anda dapat menambahkan pada vc Anda
dan atur nilai kembali ke
ex:
sumber
(Per 10 Juni 2020)
Swift 5 ( Tanpa mengedit
.Plist
file )Jika Anda menggunakan
Storyboard
, bukaNavigationController
, pilihnavigationBar
, klik padaAttributes Inspector
, lalu ubahstyle
. jika Anda perlulight content
( bilah status putih ) atur apa saja kecualidefault
katakanlah setel gayablack
Dan jika Anda ingindark content
( bilah status hitam ) aturdefault
.Default (
UIBarStyleDefault
) menghasilkanUIStatusBarStyleDefault
bilah status latar depan gelap . DanUIBarStyleBlack
akan memberikanUIStatusBarStyleLightContent
status bar.Secara terprogram
Tanpa Bilah Navigasi ( Edit
.Plist
)tambahkan
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
ke Andainfo.plist
, dan nilai yang ditetapkan adalahtrue
.Override
yangpreferredStatusBarStyle
properti dalam Controller Andasumber
Pembaruan Swift 3.0
sumber
Apa yang berhasil dengan saya, di Storyboard, buka Pengontrol Navigasi, pilih bilah navigasi, klik pada Inspektur Atribut, lalu ubah gaya dari default menjadi hitam. Itu dia!
sumber
SWIFT 4.2 Hai, saya ingin berbagi solusi, yang berhasil bagi saya yang saya dapatkan dari artikel hebat tentang subjek yang sangat menarik ini oleh Graig Grummitt.
Langkah 1 Seperti yang orang lain katakan ADD di bawah ini ke PLIST Anda
Langkah 2 di RootViewcontroller tambahkan di bawah ini
Ketika memperbarui salah satu properti
statusBarHidden
atauvcStatusBarStyle
itu akan memanggilsetNeedsStatusBarAppearanceUpdate()
dan akan memperbarui bilah status dengan nilai-nilai baru untukprefersStatusBarHidden
ataupreferredStatusBarStyle
. Dalam situasi saya, saya harus memperbarui properti ini untuk viewcontroller wadah, yang merupakan induk dari childviewcontroller yang terlihat. Saya melakukan ini menggunakan metode delegasi sederhana.Tentu ketika instantiating childViewController (Visible VC) jangan lupa untuk mengatur MainViewcontroller (Container VC) sebagai delegasinya. Terkadang saya melakukannya. :)
Kemudian di childViewController saya baru saja memanggil metode delegate ketika diperlukan untuk memperbarui status bar.
Seperti disebutkan di atas Graig Grummitt menjelaskan lebih detail tentang solusi ini dan juga bekerja dengan UINavigationControllers juga. Tautan di sini: Kasus Misterius dari Bilah Status
sumber
Klik pada grup File Pendukung (sisi kiri atas - nama proyek Anda). Arahkan ke Info. Klik + di suatu tempat di antara daftar, seperti nama bundel di bawah ini. Dan tambahkan "Lihat tampilan bilah status berbasis pengontrol" dan atur ke NO. Kemudian buka AppDelegate.swift dan ubah seperti ini:
Itu dia.
sumber
Untuk Xcode 10 Anda dapat membuat kelas dan meletakkannya di depan kelas viewController Anda, Anda dapat memanggil kelas ini di semua pengontrol tampilan diperlukan bilah status konten ...
Sekarang ubah kelas viewController Anda di:
Dan itu saja ...
sumber
Bekerja untuk Navigasi Berbasis untuk pengontrol tampilan tertentu di swift4
sumber
PERINGATAN
Setter untuk 'statusBarStyle' sudah tidak digunakan lagi di iOS 9.0: Gunakan - [UIViewController preferStatusBarStyle]
jadi solusi saya adalah seperti ini: membuat ekstensi dari pengontrol navigasi:
dan jika Anda memiliki viewController yang akan memiliki gaya selain gaya aplikasi, Anda dapat membuatnya
katakanlah bahwa Anda adalah gaya status aplikasi
.default
dan Anda ingin layar ini menjadi.lightContent
begitu barStyle akan mengambil.lightContent
sebagai nilai defaultnya, ini akan mengubah gaya bilah status menjadi lightContent, dan kemudian pastikan ketikaviewWillDisappear
mengubah barStyle lagi ke gaya bilah status app yang dalam kasus kami adalah.default
.ini bekerja untuk saya
sumber
Warna khusus untuk bilah status (iOS11 +, Swift4 +)
Jika Anda mencari solusi bagaimana mengubah bilah status ke warna kustom Anda, ini solusi yang berfungsi.
sumber