Tidak dapat menyembunyikan bilah status di iOS7

267

Saya baru saja meningkatkan iPhone 5 iOS 7 ke empat versi beta saya. Sekarang ketika saya menjalankan aplikasi saya dari Xcode 5 di iPhone ini, bilah status tidak bersembunyi, meskipun seharusnya.

Tidak bekerja:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

Tidak bekerja:

[UIApplication sharedApplication].statusBarHidden = YES;

Tidak dapat masuk ke Forum Pengembang Apple

Melih Büyükbayram
sumber
15
Tidak benar, jawaban saya melibatkan Xcode dan itu telah ditunjukkan kepada masyarakat umum. Terlalu umum untuk mengatakan 'jika Anda menjawab ini, ini adalah pelanggaran NDA' .. biarkan pengembang yang memutuskan sendiri ;-)
Jake
kemungkinan duplikat bilah Status tidak akan hilang
ekhumoro
bagaimana cara menyembunyikan bilah status ViewController tertentu secara terprogram?
bhavik

Jawaban:

558

di file aplikasi plist Anda tambahkan baris menyebutnya "Lihat tampilan status berbasis pengontrol" dan set ke NO

Perhatikan bahwa ini tidak berfungsi, jika Anda menggunakan UIImagePickerController di aplikasi.

dari http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-stide-bar/ , solusi mgiroux

Contoh menambahkan View Base Controller ke pengaturan Info Anda di Xcode

satgi
sumber
3
Luar biasa! Saya menghabiskan waktu berjam-jam untuk yang ini! Terima kasih!
Idan
12
Untuk referensi, nilai mentah yang disimpan dalam file Info.plist aktual dipanggil UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield
55
Satu-satunya masalah dengan pendekatan ini adalah jika Anda menggunakan UIImagePickerController untuk memilih gambar itu akan memaksa bilah status muncul sekali lagi. Satu-satunya cara pasti untuk mencegah hal ini adalah dengan menerapkan metode prefersStatusBarHidden di setiap pengontrol tampilan Anda dan reset UIViewControllerBasedStatusBarAppearance pengaturan plist menjadi benar.
Jason Fuerstenberg
5
Saya benar-benar tidak tahu mengapa Apple mengubah ini! Terima kasih :)
Mohamed Amine
18
Anda juga perlu diatur Status bar is initially hiddenke YA .
Zorayr
277

Tambahkan metode di pengontrol tampilan Anda.

- (BOOL)prefersStatusBarHidden {
    return YES;
}
invoodoo
sumber
35
Untuk semua yang mencari, ini adalah cara untuk melakukannya jika Anda ingin menghapus bilah status secara dinamis dalam tampilan tertentu. Metode ini berfungsi terlepas dari apa yang Anda tetapkan "Lihat tampilan bilah status berbasis pengontrol" di plist Anda!
Tn.
2
+1 b / c Saya mencari kemampuan untuk menampilkan / menyembunyikan bilah status secara dinamis. Metode pengaturan P-list (lihat posting oleh @Satgi di atas) adalah cara terbaik untuk menampilkan / menyembunyikan bilah status secara global.
JonnyB
Jika Anda memiliki galeri foto di suatu tempat Anda biasanya ingin menyembunyikan kontrol hanya di sana, dan Anda dapat menyalakan / mematikannya juga. Ini tidak berfungsi untuk saya, fungsinya bahkan tidak dipanggil. Di tempat yang sama saya memiliki
StatusBarStyle yang
4
@ Mr.T Di iOS 8, sepertinya tidak lagi demikian. Jika Anda telah mengatur tampilan bilah status berbasis pengontrol tampilan ke NO dan mengembalikan true dari prefersStatusBarHiddendalam pengontrol tampilan, itu tidak akan berfungsi. Bilah status masih muncul.
Isuru
1
@ Issuru mengapa Anda mengatur untuk TIDAK? Jika Anda mengatur ke YA itu akan meminta setiap tampilan controller dalam kasus lain tentu saja tidak.
invoodoo
84

Dalam Plist tambahkan properti berikut.

-> Status bar is initially hidden= YA

-> View controller-based status bar appearance= TIDAK

Tambahkan keduanya - sekarang bilah status akan hilang.

pengguna1179912
sumber
Yap, ini juga berhasil untuk saya. Tanpa pengaturan "Status bar awalnya disembunyikan" pilihan untuk YA itu tidak berfungsi seperti yang diharapkan. Terima kasih.
AndrewShmig
53

Untuk menyembunyikan Bilah Status pada tampilan Tunggal, Anda harus menggunakan:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

Pada awalnya, ini tidak bekerja untuk saya, dan kemudian melihat dalam dokumentasi metode ini yang mengatakan: // Mengatur statusBarHidden tidak melakukan apa-apa jika aplikasi Anda menggunakan sistem status bar default berbasis UIViewController.

Ini harus dilakukan pada file plist, menambahkan kunci View controller-based status bar appearanceset ke NO. Dan kemudian berhasil.

Debora Fortini
sumber
16

Untuk menggunakan metode aplikasi UIA lawas untuk menyembunyikan / menampilkan bilah status, aplikasi Anda harus menetapkan nilai plist untuk iOS 7:

View-Controller Based Status Bar Appearance = NO

Nilai ini diatur ke YES secara default. Jika Anda mengubahnya menjadi TIDAK, Anda dapat menggunakan metode lawas. Jika Anda membiarkannya diatur ke YA, Anda masih dapat menyembunyikan bilah status, tetapi terserah masing-masing subkelas pengontrol tampilan di aplikasi Anda untuk mengganti: prefersStatusBarHiddenuntuk mengembalikan YA.

Kapan pun aplikasi Anda membutuhkan tampilan bilah status atau visibilitas untuk berubah, dan Tampilan Bilah Status Berbasis Pengontrol Tampilan diatur ke YA, pengontrol tampilan terluar Anda perlu menelepon:

setNeedsStatusBarAppearanceUpdateAnimation

jaredsinclair
sumber
Saya harus diterapkan dalam Kustom iOS Sasaran Properties, karena dalam plist umum tidak bekerja
xarly
16

Untuk menyembunyikan bilah status di iOS7, Anda memerlukan 2 baris kode

  1. aplikasi: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionstulis

    [application setStatusBarHidden:YES];
  2. di info.plist tambahkan ini

    View-Controller Based Status Bar Appearance = NO
Shaik Riyaz
sumber
2
Hanya untuk membersihkan ini, jika Anda memasukkan ini ke dalam didFinishLaunching Anda hanya dapat menulis [application setStatusBarHidden:YES];atauapplication.statusBarHidden = YES;
joel.d
mungkin ada salah ketik dalam jawaban di atas. "Tampilan Bilah Status Berbasis-Kontroler Penampilan = TIDAK" tidak berfungsi untuk saya, tetapi "Tampilan bilah status berbasis-pengontrol = TIDAK" berhasil.
tmr
11

Ada begitu banyak kombinasi yang disarankan untuk masalah ini, tetapi masalahnya adalah bahwa iOS 6 dan 7 menggunakan metode yang berbeda untuk menyembunyikan bilah status. Saya belum pernah berhasil mengatur pengaturan plist untuk mengaktifkan perilaku gaya iOS6 di iOS 7, tetapi jika Anda sedang membangun aplikasi Anda untuk mendukung iOS 6+, Anda perlu menggunakan 3 metode sekaligus untuk memastikan pengendali tampilan tertentu menyembunyikan statusnya batang:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

Ini harus bekerja terlepas dari pengaturan plist Anda.

Kacang asin
sumber
7

Saya harus melakukan kedua perubahan di bawah untuk menyembunyikan bilah status:

Tambahkan kode ini ke pengontrol tampilan tempat Anda ingin menyembunyikan bilah status:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Tambahkan ini ke file .plist Anda (buka 'info' di pengaturan aplikasi Anda)

View controller-based status bar appearance --- NO

Kemudian Anda dapat memanggil baris ini untuk menyembunyikan bilah status:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Peter Y
sumber
6

Tambahkan saja 2 baris ini dalam file info.plist. Ini akan membuat perbaikan untuk iOS7 dan versi yang lebih lama keduanya.

  • Bilah status awalnya disembunyikan = YA
  • Lihat tampilan bilah status berbasis pengontrol = TIDAK

Arahkan ke proyek dan pilih Target -> Umum dan lihat kotak centang "Status Bar style ... Hide saat peluncuran aplikasi" akan dicentang. Ini akan bekerja

Sid
sumber
6

Coba metode sederhana ini:

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

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Rajesh Loganathan
sumber
4

Satu-satunya hal yang berhasil bagi saya adalah menambahkan yang berikut di daftar Anda

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
bartburkhardt
sumber
4

Metode termudah yang saya temukan untuk menyembunyikan bilah status di seluruh aplikasi adalah dengan membuat categoryon UIViewControllerdan overriding prefersStatusBarHidden. Dengan cara ini Anda tidak perlu menulis metode ini di setiap pengontrol tampilan tunggal.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end
mike
sumber
solusi nyata, iOS7, non-palsu terbaik, hebat
Fattie
3
  1. Dalam plist tambahkan ----

    Lihat tampilan bilah status berbasis pengontrol --- TIDAK

  2. Di setiap viewController tulis

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

Untuk masalah status bar di iOS 7 tetapi target harus 5.1 dan di atasnya untuk aplikasi

Maulik
sumber
3

Banyak jawaban di utas ini berfungsi, tetapi menurut saya jika Anda mencoba melakukan sesuatu yang dinamis, Anda akhirnya harus menelepon:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
darkheartfelt
sumber
3

Langkah-langkah Untuk Menyembunyikan bilah status di iOS 7:

1. Buka file info.plist aplikasi Anda.

2.Dan Set, Lihat tampilan status berbasis pengontrol: Boolean NO

Semoga saya memecahkan masalah status bar .....

chandrika
sumber
3

Untuk iOS 7 dalam penggunaan tampilan tunggal dalam metode viewWillappear:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

Untuk menampilkan bilah status gunakan:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
castellon oscar
sumber
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
Thunderbird
sumber
2

Dalam file Info Plist Tambahkan baris untuk properti berikut

Nama Properti: Lihat tampilan bilah status berbasis pengontrol

Nilai: TIDAK

pengguna842553
sumber
1

Coba tambahkan metode berikut ke pengontrol tampilan root aplikasi Anda:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
Bhoopi
sumber
1

Saya mencoba semua opsi yang diposting di sini di proyek saya dan mereka tidak akan berfungsi. Saya pikir itu mungkin karena fakta bahwa saya telah memperbarui Xcodeaplikasi saya dan kemudian ke iOS 7 dan beberapa pengaturan telah kacau di suatu tempat. Saya memutuskan Untuk membangun proyek yang sama sekali baru untuk itu dan setelah pengaturan sederhana hanya: " Status bar is initially hidden = YES" dan "View controller-based status bar appearance = NO " seperti yang dinyatakan oleh banyak orang lain itu bekerja dengan benar (yaitu tidak ada status bar).

Jadi saran saya jika Anda mengerjakan proyek yang telah diperbarui ke iOS 7 dari versi lama dan telah mencoba semua opsi lain adalah membangun proyek baru.

pengguna1529408
sumber
Saya menggunakan teknik yang sama ini untuk mengkonfirmasi bahwa saya bisa menyembunyikan bilah status secara global, untuk setiap layar, tetapi karena aplikasi saya cukup "berpusat waktu", saya ingin tampilan waktu untuk sebagian besar layar. Hanya satu layar yang ingin saya kecualikan karena berbagai alasan. Saya akhirnya menggunakan kebalikan dari parameter Anda: awalnya disembunyikan = penampilan status bar berbasis TIDAK & VC = YA. Kemudian saya harus meletakkan (BOOL) metode prefersStatusBarHidden (mengembalikan YA) ke dalam satu VC di mana saya ingin menyembunyikannya. Bekerja dengan baik. Saya harus menambahkan bahwa aplikasi saya hanya untuk iOS7 karena alasan lain.
bobsmells
1

Untuk 2019 ...

Untuk membuat aplikasi tanpa bilah status,

Klik info.plist, klik kanan untuk "Tambahkan baris".

Tambahkan dua ini, dengan pengaturan ini:

masukkan deskripsi gambar di sini

Hanya itu yang ada untuk itu.

Fattie
sumber
0

Untuk Swift 2.0+ iOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
Irshad Qureshi
sumber
0

Untuk menyembunyikan bilah status untuk viewController tertentu

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Untuk mengatur bilah status Tersembunyi untuk aplikasi:

  • set View controller-based status bar appearanceke NOdalam .plist dan di application: didFinishLaunchingWithOptions:set: [application setStatusBarHidden:YES];

    Catatan: setStatusBarHidden: usang

ATAU

  • dalam pengaturan Proyek -> Tab Umum -> Info Penerapan

    Hide Status barKotak centang

Lal Krishna
sumber
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Evan Ische
sumber
Pertanyaan secara eksplisit menyebutkan bahwa pendekatan ini tidak berhasil. Tolong, baca pertanyaan dengan seksama sebelum menjawab.
Borys Verebskyi
Selama tampilan tampilan status berbasis pengontrol diatur ke NO, itu adalah pendekatan terbersih.
Evan Ische
-7

Saya tidak yakin mengapa Anda "tidak bisa masuk ke Forum Pengembang Apple", tetapi (tanpa melanggar NDA) Anda juga dapat menyembunyikan statusBar Anda melalui Xcode. Ini adalah pengaturan umum pada target aplikasi Anda.masukkan deskripsi gambar di sini

Jake
sumber
tidak, bekerja seperti pesona. forum sudah cukup lama sekarang.
Jake