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


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


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


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;
}

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.


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.


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


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

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.


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];

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


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];
}

4

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

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

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


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)];

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 .....


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];


2

Dalam file Info Plist Tambahkan baris untuk properti berikut

Nama Properti: Lihat tampilan bilah status berbasis pengontrol

Nilai: TIDAK


1

Coba tambahkan metode berikut ke pengontrol tampilan root aplikasi Anda:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

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.


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.



0

Untuk Swift 2.0+ iOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}

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


-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

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


tidak, bekerja seperti pesona. forum sudah cukup lama sekarang.
Jake
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.