Cara menyembunyikan bilah status iOS


219

Di bilah status aplikasi video iOS saya tersembunyi di beberapa pengontrol tampilan. Saya telah melakukan ini menggunakan kode berikut.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Ini berfungsi untuk iOS 5 dan iOS 6, tetapi tidak di iOS 7.

  • Saya mencoba dengan ini di controller tampilan tertentu,

Misalnya:

-(BOOL)prefersStatusBarHidden { return YES; }

Ini bekerja dengan baik, tetapi saya tidak bisa menampilkan status bar lagi di controller tampilan induk.



1
Jika gaya bilah status diatur di Storyboard, setelah mengubah "Bilah status berbasis pengontrol tampilan" (di bawah), gaya mungkin harus diatur dalam plist karena pengaturan pengontrol tampilan tidak lagi digunakan. stackoverflow.com/questions/18924345/…
Matt

1
Saya menjawab pertanyaan lain. Coba ini. [cara termudah untuk menyembunyikan bilah status secara terprogram] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru

1
Saya menggunakan trik untuk itu - saya menerbitkannya sebagai pod cocoapods.org/pods/UIViewController+ODStatusBar , saya harap ini akan bermanfaat bagi siapa pun
Alex Nazarsky

Jawaban di sini sekarang sudah usang. Saya mengalami kesulitan menemukan jawaban yang benar untuk iOS 9 ketika menyembunyikan bilah status UNTUK LAYAR PELUNCURAN , jadi menghubungkan di bawah ini sehingga mudah-mudahan lebih mudah bagi orang lain untuk menemukan cara melakukannya: stackoverflow.com/questions/34413848/…
Ben

Jawaban:


277

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

masukkan deskripsi gambar di sini


40
Untuk referensi, kunci mentah adalahUIViewControllerBasedStatusBarAppearance
William Denniss

1
@ Rajneesh071 Apa yang perlu saya lakukan jika saya ingin mengatur preferStatusBarStyle untuk pekerjaan yang saya butuhkan "View controller-based status bar appearance" set it to "YES".?
Bimawa


masalah apa yang kamu hadapi?
Rajneesh071

tampaknya sudah usang, akan merusak aplikasi Anda
Ben

194

Tambahkan yang berikut ini ke Info.plist Anda:

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

Gambar


Bekerja dengan sangat baik di Xcode 11.3, iOS 13
Wayne Henderson

113

Tambahkan baris berikut dalam viewdidload

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

dan tambahkan metode baru

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

juga ubah file info.plist Lihat tampilan status bar berbasis pengontrol "= TIDAK

ini bekerja untuk saya


Thanx yang satu ini berfungsi untuk saya tetapi saya perlu menambahkan baris di bawah ini juga. "Lihat tampilan bilah status berbasis pengontrol" = NO i, e Tambahkan baris berikut dalam viewdidload [[UIAplikasi sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; dan tambahkan metode baru - (BOOL) prefersStatusBarHidden {return YES; } Tambah "Lihat tampilan bilah status berbasis pengontrol" = TIDAK di file Plist
sandy

prefersStatusBarHiddenadalah apa trik untuk saya (apakah dengan solusi ini dengan yang serupa lainnya)
Abdo

34

Dalam Plist tambahkan properti berikut.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

sekarang bilah status akan disembunyikan.


8
Kunci mentah adalah UIStatusBarHidden dan UIViewControllerBerdasarkanStatusBarPenampilan
leolobato

27

Coba metode sederhana ini:


Tujuan-C:

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

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}

Cepat:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
Ini jawaban yang bagus! Coba juga dengan berbagai UIStatusBarAnimations, mereka cukup hebat.
VedTopkar

Jangan lupa [super viewWillAppear:animated]dan[super viewWillDisappear:animated]
SamB

1
Solusi sederhana ini bekerja untuk saya iOS 10. Cara menjadi lelaki sederhana!
coolcool1994

14

Saya melakukan yang berikut ini dan sepertinya berhasil (bahkan di iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarX sudah tidak digunakan lagi di iOS9
  • Sudah tidak berlaku lagi untuk memiliki UIViewControllerBasedStatusBarAppearance = TIDAK di info.plist Anda
  • Jadi kita harus menggunakan preferStatusBarX di semua pengontrol tampilan kita

Tapi itu menjadi lebih menarik ketika ada UINavigationController yang terlibat:

  • Jika navigationBarHidden = true, child, UIViewController's preferStatusBarX dipanggil, karena anak tersebut menampilkan konten di bawah bilah status.
  • Jika navigationBarHidden = false, preferstatusBarX UINavigationController's dipanggil, setelah semua itu menampilkan konten di bawah bilah status.
  • DiutamakanStatusBarStyle default yang disukai UINavigationController menggunakan nilai dari UINav.navigationBar.barStyle. .Default = konten bilah status hitam, .Black = konten bilah status putih.
  • Jadi, jika Anda mengatur barTintColor ke beberapa warna khusus (yang kemungkinan besar adalah Anda), Anda juga perlu mengatur barStyle ke .Black untuk mendapatkan konten bar status putih. Saya akan mengatur barStyle menjadi hitam sebelum mengatur barTintColor, kalau-kalau barStyle menimpa barTintColor.
  • Alternatifnya adalah Anda dapat mensubkontrak UINavigationController alih-alih bermain-main dengan gaya bar.
  • NAMUN, jika Anda subkelas UINavigationController, Anda tidak dapat mengontrol bilah status jika navigationBarHidden = true. Entah bagaimana UIKit langsung menuju ke UIViewController anak tanpa meminta UINavigationController dalam situasi ini. Saya akan berpikir itu seharusnya menjadi tanggung jawab UINavigationController untuk meminta anak> mengangkat bahu <.
  • Dan yang ditampilkan secara UIViewController hanya mendapatkan suara di status bar jika modalPresentationStyle = .FullScreen.
  • Jika Anda punya pengontrol tampilan modal gaya presentasi kustom dan Anda benar-benar ingin mengontrol bilah status, Anda dapat mengatur modalPresentationCapturesStatusBarAppearance = true.

Mengapa apel tidak bisa hanya mengikuti satu saran? Jika tidak rusak, jangan perbaiki!
Jargen89

9

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

  1. dalam aplikasi: (UIAplikasi *) aplikasi didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

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

     View-Controller Based Status Bar Appearance = NO
    

8

Untuk pemahaman yang lebih baik, tambahkan beberapa foto dengan komentar:

Aplikasi sebelum perubahan apa pun

masukkan deskripsi gambar di sini

Ditemukan di Project Navigatorfolder Anda bernama Supporting Filesdan klik pada file * .plist

masukkan deskripsi gambar di sini

Setelah Anda akan mendapatkan pengaturan yang berbeda dari aplikasi Anda ditampilkan. Anda perlu menambahkan 2 tombol UIStatusBarHiddendan UIViewControllerBasedStatusBarAppearance. Anda dapat melakukan ini cukup mengklik tombol +

masukkan deskripsi gambar di sini

Setelah menekan + Anda dapat memilih salah satu tombol - baru mulai mengetik.

Versi yang benar:

masukkan deskripsi gambar di sini

Dan akhirnya aplikasi setelah menerapkan perubahan ini:

masukkan deskripsi gambar di sini

Anda juga dapat menemukan solusi alternatif di sini


8

Di iOS10 yang perlu saya lakukan adalah mengganti prefersStatusBarHiddenvar di RootViewController(Swift) saya:

override var prefersStatusBarHidden: Bool {
    return true
}

7

Coba itu;

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

Bagus. Saya dapat menggunakan ini untuk menyembunyikan bilah status pada pengontrol tampilan yang tidak diperlukan saat itu lalu menyembunyikannya setelah pengguna masuk.
LondonGuy

5

Untuk menyembunyikan bilah status Anda di iOS7:

Buka file-plist Anda, lalu tambahkan baris yang disebut "Lihat tampilan status berbasis pengontrol" dan atur nilainya NO.


5

Ini adalah versi Swift (sebelum iOS9):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

Ini juga berfungsi (iOS7 +):

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

Anda juga perlu menelepon:

setNeedsStatusBarAppearanceUpdate()

di katakan viewDidLoad().

Perhatikan bahwa jika Anda menggunakan pengontrol SplitView, atau containerpengontrol tampilan lainnya , Anda juga harus mengembalikannya ke kelas saat dikirim childViewControllerForStatusBarHidden. Salah satu cara untuk melakukan ini adalah memiliki var lemah publik untuk mengatakan statusController, dan mengembalikannya dalam metode yang diganti.


1
Blok teratas sudah tidak digunakan lagi di iOS8 - gunakan pendekatan kedua Anda. Dan terimakasih! Saya mengedit kode untuk menambahkan panggilan wajib lainnya.
David H

5

iOS 9 dan selanjutnya:

Sebagai statusBarHiddenmetode itu Usang dari iOS9 Anda perlu menambahkan dua nilai di plist seperti di bawah ini:

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

atau dengan Antarmuka Pengguna. Harap sebutkan gambar di bawah ini:

masukkan deskripsi gambar di sini

Seperti statusBarHiddenyang Usang dari iOS9 :

@ property (readwrite, nonatomic, pengambil = isStatusBarHidden) Bool statusBarHidden ns_ BERLAKU LAGI _IOS (2_0, 9_0 , "Gunakan - [UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


5

SOLUSI TETAP UNTUK SWIFT 3+ (iOS 9, 10)

1- Dalam info.plist atur properti di bawah ini

masukkan deskripsi gambar di sini

2 - Tempel kode di bawah ini ke Root controller, To

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Anda dapat menelepon isStatusBarHidden = truedan ke isStatusBarHidden = falsemana Anda ingin hide/showbilah status


4

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


4

Langkah-langkah untuk menyembunyikan bilah status di iOS
1. buka file AppDelegate.m , tambahkan application.statusBarHidden di didFinishLaunchingWithOptions metode

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. buka info.plist dan atur

View controller-based status bar appearance set NO


4

Cepat 5

Gunakan langkah-langkah berikut untuk menyembunyikan Bilah Status iOS:

  1. Buka di Info.plist.
  2. Tambahkan kunci baru Lihat tampilan bilah status berbasis pengontrol dan nilai yang diatur ke NO .
  3. Tambahkan kunci baru Bilah Status pada awalnya disembunyikan dan nilai ditetapkan ke YA .
  4. Kompilasi ulang proyek.
  5. Bilah status harus disembunyikan di ponsel iOS sekarang.

Tangkapan Layar Pengaturan Akhir:

Pengaturan akhir

Ini sedang bekerja pada Xcode 10.2


2

Dari UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Jadi harus diatur View controller-based status bar appearanceke TIDAK


2

Untuk menjawab pertanyaan Susitha: gunakan setNeedsStatusBarAppearanceUpdate . Ini akan membuat panggilan ke prefersStatusBarHidden untuk menyegarkan dengan status bilah status yang Anda inginkan. Coba ini:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

Jika Anda ingin melihat bilah status lagi, atur properti Anda hideStatusBar (atau apa pun namanya) menjadi NO. Panggil preferStatusBarHidden secara tidak langsung dengan membuat panggilan lain ke

[self setNeedsStatusBarAppearanceUpdate]

1

Pembaruan untuk Swift 3:

Perbarui Info.plist dengan info berikut:

View controller-based status bar appearance: NO

Kemudian, dalam ViewController atau di tempat lain:

UIApplication.shared.isStatusBarHidden = true

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.