Bilah status tidak akan hilang

112

Saya membuat aplikasi dan saya ingin bilah status disembunyikan. Saat saya menguji aplikasi, bilah status disembunyikan saat layar splash ditampilkan, tetapi setelah aplikasi terisi penuh, bilah status muncul kembali.

Saya menggunakan Xcode 5 dan iOS 7, dan telah mencoba menonaktifkan bilah status secara terprogram

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

di file info.plist, dan menggunakan inspektur atribut di file .xib. Sepertinya tidak ada yang berhasil.

Ada ide?

pengguna2397282
sumber

Jawaban:

220

Coba tambahkan metode berikut ke pengontrol tampilan root aplikasi Anda:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
Quentin
sumber
2
Bagaimana melakukan ini secara global?
jjxtra
16
Selain itu, sebagaimana dinyatakan dalam dokumen Apple, Anda harus [self setNeedsStatusBarAppearanceUpdate];memanggil metode ini setelah memanggil dengan sesuatu selain nilai default (nilai defaultnya adalah NO).
manderson
3
@PsychoDad Periksa jawaban saya untuk solusi yang lebih global.
Idan
2
Sempurna, terima kasih. Saya tidak tahu mengapa iOS 7 melakukan ini dan tidak menghormati XIB yang tidak berisi pengaturan bilah status!
justinhartman
1
Menambahkan ini pada ViewController yang ditambahkan ke tumpukan adalah semua yang saya butuhkan untuk menyembunyikan bilah status di viewcontroller; statusbar kembali ketika viewcontroller ini dihapus.
MacD
126

Anda harus menambahkan nilai ini ke plist: " Lihat tampilan bilah status berbasis pengontrol " dan setel ke " TIDAK ".

Ini akan memungkinkan Anda untuk mengatur bilah status ke mode tersembunyi . Ini membuatnya menjadi jawaban global yang tidak seperti jawaban lain yang disediakan.

PEMBARUAN: Jika Anda ingin bilah status disembunyikan pada layar splash jangan lupa untuk menandai " Sembunyikan selama peluncuran aplikasi " pada opsi bilah status target. Selain itu, Anda dapat menambahkan " Bilah status pada awalnya disembunyikan " ke " YA " di plist jika Anda tidak ingin melakukannya dengan kode di dalam aplikasi.

Idan
sumber
2
Butuh banyak waktu bagiku untuk memikirkannya. Ini adalah masalah yang menurut saya akan dialami semua orang dan Apple tidak cukup menyebutkannya. senang membantu ...
Idan
7
berfungsi dengan baik, jangan lupa untuk mengatur nilai .plist untuk "Status bar awalnya tersembunyi" ke YES.
andreas-supersmart
1
Wow, hanya itu yang berfungsi dengan Kobold2d 2.1.0 dan iOS 7, terima kasih banyak!
Binarian
5
Apple sebenarnya bukan juara kompatibilitas mundur. Mari kita semua menari mengikuti seruling mereka dan memperbarui setiap aplikasi kita. Maaf, melampiaskan frustrasi. Disebabkan oleh Apple.
Henrik Erlandsson
1
akhirnya itu berhasil untuk saya. Karena - (BOOL) metode prefersstatusbarhidden tidak berfungsi di modelview.
utkal patel
73

Kode yang Anda posting berfungsi untuk iOS 6.1 dan di bawahnya. Untuk iOS 7, Apple telah menyediakan metode baru untuk secara langsung mengontrol bilah status untuk setiap tampilan. Mematikan opsi ini di Info.plist Anda akan memungkinkan Anda menyembunyikan bilah status, setidaknya untuk Pratinjau Pengembang saat ini (4).

Tambahkan ini dan setel ke NO

Untuk referensi, silakan lihat panduan transisi iOS 7 yang tersedia di portal pengembang Apple.

Sven
sumber
3
Menurut saya, jawaban ini lebih baik karena di aplikasi saya, saya hanya ingin menyembunyikan bilah status dalam mode lanskap, terima kasih!
Son Nguyen
terima kasih ini membantu saya karena saya ingin menyembunyikannya untuk seluruh aplikasi saya
kevinl
2
Menurut pendapat saya, jawaban ini harus menjadi jawaban terbaik -> Dijelaskan di sini developer.apple.com/library/prerelease/ios/documentation/…
marceloquinta
5
Saya telah melakukan ini, tetapi sepertinya itu baru saja menyembunyikan bilah status, namun, aplikasi saya masih 'didorong' oleh jumlah ruang yang akan digunakan bilah status, dan saya masih dapat melihat indikator baterai!
vedran
36

baik saya mencoba menyembunyikan bilah status di semua aplikasi saya dan di "app" -info.plist dan saya menambahkan dua baris dalam kamus "Daftar Properti Informasi" Saya menambahkan "Lihat tampilan bilah status berbasis pengontrol" setel NO dan di " Bilah status awalnya tersembunyi "setel YA dan untuk saya berfungsi n_n '

info plist

user_Dennis_Mostajo
sumber
2
Ini memaksa aplikasi Anda ke mode kompatibilitas yang dirancang hanya untuk membuat aplikasi lama berjalan sebagaimana dimaksud pada iOS 7 ketika pengembang tidak punya waktu untuk memperbaiki aplikasi untuk cara baru melakukan sesuatu. Sebagai gantinya, Anda perlu mengimplementasikan metode prefer * di pengontrol tampilan Anda.
lhunath
17

Namun, jika Anda menggunakan UIImagePicker, bilah status muncul lagi.

Dalam hal ini, Anda harus menyembunyikan bilah status seperti di bawah ini,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
sendirian
sumber
2
Saya mengalami masalah yang sama. Bilah status disembunyikan sampai saya menggunakan UIImagePicker. Saya mencoba solusi Anda dan tidak berhasil untuk saya. Apakah saya perlu menambahkan sesuatu selain kode di postingan Anda?
Dev01
@WootWoot Saya juga menambahkan - (BOOL) prefersStatusBarHidden {kembali YA; } untuk melihat pengontrol. Silakan mencobanya.
Sendirian
sepertinya tidak berhasil untuk saya .. haruskah Anda menelepon setNeedsStatusBarAppearanceUpdate?
RyanM
Saya perlu menyembunyikan bilah status dengan satu klik tombol. Saya telah mencoba kode di bawah ini tetapi tidak berhasil. Bisakah seseorang membantu saya. [[UIApplication sharedApplication] setStatusBarHidden: YES];
janitheshan
8

Setelah beberapa lama mencari, akhirnya saya menemukan solusi yang sangat sederhana yang juga menangani UIImagePickerControllermasalah tersebut.

Seperti yang disebutkan di jawaban lain, setel bilah status Anda tersembunyi di AppDelegate didFinishLaunching, dan setel "Lihat tampilan bilah status berbasis pengontrol" ke NO.

Kemudian, di AppDelegate Anda:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - Status Bar Anda akan tetap tersembunyi bahkan ketika UIImagePickerController adalah yang terpenting.

Ini lebih baik daripada 'menyembunyikannya' setiap kali Anda menampilkan UIImagePickerController karena tetap tersembunyi di seluruh aplikasi.

ikuramedia
sumber
2
Meskipun ada sesuatu yang tampaknya masih rusak setidaknya di iOS7 pada iPad - UIImagePickerController masih menampilkan bilah status untuk kedua kalinya ... Hurrrr ... :-( Saat ini saya menggunakan appDelegate bersama dengan menyembunyikannya lagi di setiap viewWillAppear Jadi biarpun terlihat kotor sebentar itu cepat diperbaiki lagi.
ikuramedia
1
Ini adalah satu-satunya metode yang berhasil untuk saya di iOS8 ... entah bagaimana prefersStatusBarHidden tidak dipanggil di pengontrol tampilan saya.
mojuba
7

Untuk menyembunyikan bilah status pada UIViewController tertentu, cukup tambahkan ini:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Semoga ini membantu !

Mike Gledhill
sumber
!! Ini adalah solusi yang berhasil untuk saya di iOS 9.2, memodifikasi plist tidak berpengaruh.
mico
5

Anda dapat bersembunyi dari ringkasan proyek. ada kotak centang yang disembunyikan selama peluncuran.

Lihat snapshotnya

masukkan deskripsi gambar di sini

sohail.hussain.dyn
sumber
4

Saya menemukan solusi ini untuk saya. Ini bekerja seperti pesona. Tulis kode ini pada viewcontroller Anda yang ingin Anda gunakan UIImagePickerController.

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }
xevser
sumber
3

Selain jawaban dari alones di atas, pastikan untuk mengimplementasikan metode imagePickerControllerDidCancel dan tambahkan kode yang sama di sana juga.

Penipu
sumber
2

Saya juga mengalami masalah dengan UIImagePicker. Mirip dengan jawaban Sendiri, solusi saya adalah sebagai berikut. Saya menambahkan baris atau kode ini:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

untuk fungsi ini:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Saya belum menguji ini dengan iOS 6 atau lebih tua tetapi berfungsi dengan baik di iOS 7.

Dev01
sumber
2

Solusi Cepat

cukup tambahkan ini ke pengontrol tampilan Anda:

override func prefersStatusBarHidden() -> Bool {
    return true
}
Dan Beaulieu
sumber
0

Saya menggunakan Xcode 6, solusi ini berfungsi di iOS 7 dan 8 untuk saya:

Pertama, Setel "Lihat tampilan bilah status berbasis pengontrol" ke NO dalam file plist.

Kedua, di AppDelegate, tambahkan ini:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
RRN
sumber
0

Masalah saya adalah bahwa saya menggunakan penahanan pengontrol tampilan. Hanya pengontrol tampilan paling atas, yang disematkan ke pengontrol navigasi misalnya, yang dapat menyembunyikan atau menampilkan bilah status.

pengujian
sumber