İOS7'de durum çubuğu gizlenemiyor


267

İPhone 5 iOS 7'mi dört beta sürüme yükselttim. Uygulamamı bu iPhone'da Xcode 5'ten çalıştırdığımda, durum çubuğu olması gerekse bile gizlenmiyor.

Çalışmıyor:

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

Çalışmıyor:

[UIApplication sharedApplication].statusBarHidden = YES;

Apple Geliştirici Forumlarına giriş yapamıyorum


15
Untrue, cevabım Xcode'u içeriyordu ve bu halka gösterildi. 'Buna cevap verirseniz, NDA'nın ihlali' demek çok geneldir .. geliştiricilerin kendileri için karar vermelerine izin verin ;-)
Jake


durum çubuğunu programlı olarak özel ViewController gizlemek nasıl?
bhavik

Yanıtlar:


558

apps plist dosyasında bir satır ekleyin buna "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" deyin ve NO olarak ayarlayın

Uygulamada UIImagePickerController kullanıyorsanız, bunun işe yaramadığını unutmayın.

dan http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , mgiroux çözümüyle

Xcode'daki Bilgi ayarlarınıza Görünüm Tabanı Denetleyicisini ekleyen bir örnek


3
İnanılmaz! Bu saatlerce boşa harcıyorum! Teşekkür ederim!
Idan

12
Başvuru için, gerçek Info.plist dosyasında saklanan ham değer çağrılır UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield

55
Bu yaklaşımla ilgili tek sorun, görüntüleri seçmek için UIImagePickerController'ı kullanırsanız, durum çubuğunun bir kez daha görünmesini zorlar. Bunu önlemenin tek kesin yolu, her bir denetleyicinizde prefersStatusBarHidden yöntemini uygulamak ve UIViewControllerBasedStatusBarAppearance'u sıfırlamaktır. plist ayarının doğru olması.
Jason Fuerstenberg

5
Apple'ın bunu neden değiştirdiğini gerçekten bilmiyorum! Teşekkürler :)
Mohamed Amine

18
Ayrıca sette gerek Status bar is initially hiddeniçin EVET .
Zorayr

277

Görünüm denetleyicinize yöntem ekleyin.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
Tüm seyirciler için, belirli görünümlerde durum çubuğunu dinamik olarak kaldırmak istiyorsanız bunu yapmanın yolu budur. Bu yöntem, plistinizde "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" olarak belirlediğiniz ayar ne olursa olsun çalışır!
Bay T

2
+1 b / c Durum çubuğunu dinamik olarak gösterme / gizleme yeteneğini arıyorum. P-listesi ayarlama yöntemi (yukarıdaki @Satgi tarafından gönderilen gönderiye bakın), durum çubuğunu global olarak göstermenin / gizlemenin en iyi yoludur.
JonnyB

Bir yerde bir fotoğraf galeriniz varsa, kontrolleri yalnızca orada gizlemek istediğinizde de açıp kapatabilirsiniz. Bu benim için işe yaramıyor, fonksiyon bile çağrılmıyor. Ben aynı yerde bir tercih
edilenStatusBarStyle var

4
@ Mr.T iOS 8'de artık durum böyle değil. Görünüm denetleyicisi tabanlı durum çubuğu görünümünü HAYIR olarak ayarladıysanız ve prefersStatusBarHiddenbir görünüm denetleyicisinden true değerine dönerseniz , çalışmaz. Durum çubuğu hala görünür.
Isuru

1
@Isuru neden HAYIR olarak ayarladınız? EVET olarak ayarlarsanız, her durumda görüntü denetleyicisine başka bir durumda elbette istemez.
invoodoo

84

Liste'ye aşağıdaki özellikleri ekleyin.

-> Status bar is initially hidden= EVET

-> View controller-based status bar appearance= HAYIR

Her ikisini de ekleyin - şimdi durum çubuğu kaybolacak.


Evet, bu benim için de işe yaradı. "Durum çubuğu başlangıçta gizlidir" seçeneği ayarlanmadan EVET beklendiği gibi çalışmıyor. Teşekkürler.
AndrewShmig

53

Durum Çubuğunu Tek bir görünümde gizlemek için şunları kullanmalısınız:

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

İlk başta, bu benim için işe yaramadı ve sonra bu yöntemin belgelerinde bir testere şöyle diyor: // StatusBarHidden ayarı, uygulamanız varsayılan UIViewController tabanlı durum çubuğu sistemini kullanıyorsa hiçbir şey yapmaz.

Bu, plist dosyasında anahtar View controller-based status bar appearancesetini ekleyerek yapılmalıdır NO. Ve sonra işe yaradı.


16

Durum çubuğunu gizlemek / göstermek için eski UIApplication yöntemini kullanmak için uygulamanızın iOS 7 için bir plist değeri ayarlaması gerekir:

View-Controller Based Status Bar Appearance = NO

Bu değer varsayılan olarak EVET olarak ayarlanmıştır. Bunu HAYIR olarak değiştirirseniz, eski yöntemleri kullanabilirsiniz. Bunu EVET olarak ayarlı bırakırsanız, durum çubuğunu yine de gizleyebilirsiniz, ancak geçersiz kılmak için uygulamanızdaki her bir görünüm denetleyicisi alt sınıfına kalır: prefersStatusBarHiddenEVET'i döndürmek.

Uygulamanızın değiştirmek için durum çubuğu görünümüne veya görünürlüğüne ihtiyacı olduğunda ve Görünüm-Denetleyici Tabanlı Durum Çubuğu Görünümü EVET olarak ayarlandığında, en dıştaki görünüm denetleyicinizin araması gerekir:

setNeedsStatusBarAppearanceUpdateAnimation


Özel iOS Hedef Özelliklerine başvurmak zorunda kaldım, çünkü genel
plistte

16

İOS7'deki durum çubuğunu gizlemek için 2 satır kod gerekir

  1. uygulama: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsyazma

    [application setStatusBarHidden:YES];
  2. info.plist içinde bunu ekle

    View-Controller Based Status Bar Appearance = NO

2
Sadece bunu temizlemek için, bunu didFinishLaunching içine koyuyorsanız, sadece yazabilir [application setStatusBarHidden:YES];veyaapplication.statusBarHidden = YES;
joel.d

cevapta bir yazım hatası olabilir. "Görünüm-Denetleyici Tabanlı Durum Çubuğu Görünümü = HAYIR" benim için çalışmadı, ancak "Görünüm denetleyicisi tabanlı durum çubuğu görünümü = HAYIR" işe yaradı.
tmr

11

Bu sorun için çok fazla kombinasyon öneriliyor, ancak sorun iOS 6 ve 7'nin durum çubuğunu gizlemek için farklı yöntemler kullanması. İOS 7'de iOS6 tarzı davranışı etkinleştirmek için plist ayarlarını yapmakta hiç başarılı olmadım, ancak uygulamanızı iOS 6+'yı destekleyecek şekilde oluşturuyorsanız, belirli bir görünüm denetleyicisinin durumu gizlediğinden emin olmak için aynı anda 3 yöntem kullanmanız gerekir bar:

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

Bu, plist ayarlarınıza bakılmaksızın çalışmalıdır.


7

Durum çubuğunu gizlemek için aşağıdaki her iki değişikliği de yapmak zorunda kaldım:

Bu kodu, durum çubuğunu gizlemek istediğiniz görünüm denetleyicisine ekleyin:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Bunu .plist dosyanıza ekleyin (uygulama ayarlarınızda 'bilgi' bölümüne gidin)

View controller-based status bar appearance --- NO

Ardından durum çubuğunu gizlemek için bu satırı çağırabilirsiniz:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

Bu 2 satırı info.plist dosyasına ekleyin. Hem iOS7 hem de eski sürüm için düzeltmeyi yapacak.

  • Durum çubuğu başlangıçta gizlidir = EVET
  • Denetleyici tabanlı durum çubuğu görünümünü görüntüle = HAYIR

Projeye gidin ve Hedefler -> Genel'i seçin ve "Durum Çubuğu stili ... Uygulama başlatılırken gizle" onay kutusuna bakın. Bu çalışacak.


6

Bu basit yöntemi deneyin:

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

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

4

Benim için çalışan tek şey plistinize aşağıdakileri eklemek

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

4

Durum çubuğunu tüm uygulama boyunca gizlemek için bulduğum en kolay yöntem, categoryaçık UIViewControllerve geçersiz kılmakprefersStatusBarHidden . Bu şekilde, bu yöntemi her bir görünüm denetleyicisine yazmak zorunda kalmazsınız.

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

en iyi gerçek, iOS7, sahte olmayan bir çözüm, harika
Fattie

3
  1. Plist ekleyin ----

    Denetleyici tabanlı durum çubuğu görünümünü görüntüleme - HAYIR

  2. Her görünümde Denetleyici yazma

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

İOS 7'de durum çubuğu sorunu için ancak uygulama için hedef 5.1 ve üstü olmalıdır


3

Bu konudaki cevapların çoğu işe yarıyor, ancak sonunda aramanız gereken dinamik bir şey yapmaya çalışıyorsanız benim anlayışım:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

Adımlar iOS 7'de durum çubuğunu gizleme:

1. uygulama info.plist dosyanıza gidin.

2.Ve Set, Görünüm denetleyicisi tabanlı durum çubuğu görünümü: Boolean NO

Umarım durum çubuğu sorununu çözdüm .....


3

Tek bir görünümde iOS 7 için viewWillappear yönteminde kullanın:

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

Durum çubuğunu görüntülemek için:

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


2

Bilgi Plist dosyasında Aşağıdaki özellik için bir satır ekleyin

Özellik Adı: Denetleyici tabanlı durum çubuğu görünümünü görüntüleme

Değer: HAYIR


1

Uygulamanızın kök görünümü denetleyicisine aşağıdaki yöntemi eklemeyi deneyin:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

Projemde yayınlanan tüm bu seçenekleri denedim ve işe yaramadı. Bunun benim Xcodeve daha sonra uygulamayı iOS 7'ye güncellediğim ve bununla ilgili bazı ayarların bir yere karıştığı gerçeğiyle ilgili olabileceğini düşündüm . Bunun için tamamen yeni bir proje yapmaya karar verdim ve basitçe ayarladıktan sonra: " Status bar is initially hidden = YES" ve "View controller-based status bar appearance = NO " birçokları tarafından belirtildiği gibi doğru çalıştı (yani durum çubuğu yok).

Eski bir sürümden iOS 7'ye güncellenmiş ve diğer tüm seçenekleri denemiş bir proje üzerinde çalışıyorsanız, tavsiyem yeni bir proje oluşturmaktır.


Aynı tekniği başlangıçta her ekran için durum çubuğunu küresel olarak gizleyebileceğimi doğrulamak için kullandım, ancak uygulamam oldukça "zaman merkezli" olduğu için çoğu ekran için zaman gösterimi istedim. Çeşitli nedenlerle hariç tutmak istediğim sadece bir ekran. Ben parametrelerin tersini kullanarak sona erdi: başlangıçta gizli = NO & VC tabanlı durum çubuğu görünümü = EVET. Sonra (BOOL) prefersStatusBarHidden yöntemini (YES döndürerek) gizli olmasını istediğim bir VC'ye koymak zorunda kaldım. Güzel çalışıyor. Uygulamamın başka nedenlerle yalnızca iOS7 olduğunu eklemeliyim.
bobsmells

1

2019 İçin ...

Durum çubuğu YOK olan bir uygulama yapmak için,

İnfo.plist'e tıklayın, "Satır ekle" ye sağ tıklayın.

Bu ikisini şu ayarlarla ekleyin:

resim açıklamasını buraya girin

Hepsi bu kadar.



0

Swift 2.0+ IOS 9 için

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

0

Belirli bir görünüm için durum çubuğunu gizlemek için

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Uygulama için gizli durum çubuğunu ayarlamak için:

  • seti View controller-based status bar appearanceiçin NO.plist ve in application: didFinishLaunchingWithOptions:setinde: [application setStatusBarHidden:YES];

    Not: setStatusBarHidden: kullanımdan kaldırıldı

VEYA

  • Proje ayarlarında -> Genel Sekmesi -> Dağıtım Bilgileri

    Onay Hide Status barkutusunu işaretleyin.


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

Soru, bu yaklaşımın işe yaramadığını açıkça belirtiyor. Lütfen cevaplamadan önce soruyu dikkatle okuyun.
Borys Verebskyi

Görünüm denetleyicisi tabanlı durum çubuğu görünümü HAYIR olarak ayarlandığı sürece, en temiz yaklaşımdır.
Evan Ische

-7

Neden "Apple Geliştirici Forumlarına giriş yapamıyorsunuz" emin değilim, ancak (NDA'yı ihlal etmeden) statusBar'ınızı Xcode aracılığıyla da gizleyebilirsiniz. Uygulama hedefinizdeki genel bir ayardır.resim açıklamasını buraya girin


hayır, bir cazibe gibi çalışır. forumlar bir süredir hazır.
Jake
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.