İOS durum çubuğunu gizleme


219

İOS video uygulamamda durum çubuğu bazı görünüm denetleyicilerinde gizli. Aşağıdaki kodu kullanarak bunu yaptım.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • İOS 5 ve iOS 6 için çalışır, ancak iOS 7'de çalışmaz.

  • Bu özellikle görünüm denetleyicisi ile denedim,

Örneğin:

-(BOOL)prefersStatusBarHidden { return YES; }

İyi çalışıyor, ancak üst görünüm denetleyicisinde durum çubuğunu tekrar gösteremiyorum.



1
Durum çubuğu stili Öykü Tablosunda ayarlanırsa, "Denetleyici tabanlı durum çubuğunu görüntüle" (aşağıda) değiştirildikten sonra, görünüm denetleyicisi ayarı artık kullanılmayacağından stilin plist'te ayarlanması gerekebilir. stackoverflow.com/questions/18924345/…
Matt

1
Başka bir soruya cevap verdim. Bunu dene. [durum çubuğunu programlı olarak gizlemenin en kolay yolu] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru

1
Bunun için bir hile kullandım - pod cocoapods.org/pods/UIViewController+ODStatusBar olarak yayınladım , umarım herkes için yararlı olacaktır
Alex Nazarsky

Buradaki cevaplar artık kullanımdan kaldırıldı. Durum çubuğunu gizlerken iOS 9 için doğru cevabı bulmada sorun yaşadım , bu yüzden aşağıda bağlantı kurmak, böylece başkalarının bunu nasıl yapacağını bulmalarını umuyorum: stackoverflow.com/questions/34413848/…
Ben

Yanıtlar:


277

Bu değeri plist'e eklemelisiniz: " Denetleyici tabanlı durum çubuğu görünümünü görüntüle " ve " HAYIR " olarak ayarlayın.

resim açıklamasını buraya girin


40
Referans için ham anahtarUIViewControllerBasedStatusBarAppearance
William Denniss

1
@ Rajneesh071 İhtiyacım olan iş için tercih edilen seti ayarlamak istersem ne yapmam gerekir "View controller-based status bar appearance" set it to "YES".?
Bimawa


hangi sorunla karşı karşıyasın?
Rajneesh071

kullanımdan kaldırılmış gibi görünüyor, uygulamanızı
Ben

194

Info.plist'inize aşağıdakileri ekleyin:

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

görüntü


Xcode 11.3, iOS 13'te harika çalışıyor
Wayne Henderson

113

Viewdidload'a aşağıdaki satırı ekleyin

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

ve yeni yöntem ekle

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

ayrıca info.plist dosyasını değiştir Denetleyici tabanlı durum çubuğu görünümünü görüntüle "= HAYIR

benim için çalışıyor


Teşekkür ederim bu benim için çalışıyor ama ben de plist altında satır eklemek gerekir. "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" = HAYIR i, e viewdidload'da aşağıdaki satırı ekle [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; ve yeni yöntem ekle - (BOOL) prefersStatusBarHidden {return YES; } "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" = Plist dosyasında NO
kumlu

prefersStatusBarHiddenbenim için hile yaptı (diğer benzer çözümlerle bu çözüm olsun)
Abdo

34

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

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

şimdi durum çubuğu gizlenecek.


8
Ham anahtarlar UIStatusBarHidden ve UIViewControllerBasedStatusBarAppearance
leolobato

27

Bu basit yöntemi deneyin:


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

Swift:

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
Bu harika bir cevaptı! Ayrıca çeşitli UIStatusBarAnimations ile deneyin , onlar oldukça harika.
VedTopkar

Unutmayın [super viewWillAppear:animated]ve[super viewWillDisappear:animated]
SamB

1
Bu basit çözüm benim için işe yaradı iOS 10. Basit olmanın yolu!
coolcool1994

14

Aşağıdakileri yaptım ve işe yarıyor gibi görünüyor (iOS 8'de bile):

- (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, iOS9'dan itibaren kullanımdan kaldırıldı
  • İnfo.plist'inizde UIViewControllerBasedStatusBarAppearance = NO olması önerilmemektedir.
  • Bu yüzden tüm görünüm denetleyicilerimizde preferStatusBarX kullanmalıyız

Ancak bir UINavigationController söz konusu olduğunda daha ilginç hale gelir:

  • NavigationBarHidden = true ise, alt öğe içeriği durum çubuğunun altında görüntülediğinden UIViewController'ın tercih edilenStatusBarX alt öğesi çağrılır.
  • NavigationBarHidden = false ise, UINavigationController için preferStatusBarX çağrılır, sonuçta durum çubuğu altında içerik görüntülenir.
  • UINavigationController'ın varsayılan preferStatusBarStyle öğesi, UINav.navigationBar.barStyle öğesinin değerini kullanır. .Default = siyah durum çubuğu içeriği, .Black = beyaz durum çubuğu içeriği.
  • Bu nedenle, barTintColor'u bazı özel renklere ayarlıyorsanız (muhtemelen sizsiniz), beyaz durum çubuğu içeriği almak için barStyle'ı .Black olarak ayarlamanız gerekir. BarStyle'ın barTintColor'u geçersiz kılması durumunda barTintColor'u ayarlamadan önce barStyle'ı siyaha ayarladım.
  • Alternatif olarak, çubuk stili ile uğraşmak yerine UINavigationController alt sınıfını yapabilirsiniz.
  • Ancak, UINavigationController alt sınıfını yaparsanız, navigationBarHidden = true durumunda durum çubuğu üzerinde hiçbir denetiminiz olmaz. Bir şekilde UIKit, bu durumda UINavigationController'a sormadan doğrudan UIViewController'a gider. Çocuğa> omuz silkme <sormanın UINavigationController sorumluluğu olması gerektiğini düşünürdüm.
  • Ve modally görüntülenen UIViewController durum çubuğunda sadece söz almak modalPresentationStyle = .FullScreen.
  • Özel bir sunum stili kalıcı görünüm denetleyiciniz varsa ve gerçekten durum çubuğunu denetlemesini istiyorsanız, modalPresentationCapturesStatusBarAppearance = true değerini ayarlayabilirsiniz.

Elma neden sadece bir tavsiyeye uymuyor? Eğer kırık değilse, tamir etmeyin!
Jargen89

9

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

  1. uygulamada: (UIApplication *) uygulama didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

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

     View-Controller Based Status Bar Appearance = NO
    

8

Daha iyi anlamak için yorum içeren bazı fotoğraflar ekleyin:

Herhangi bir değişiklikten önce uygulama

resim açıklamasını buraya girin

Project NavigatorAdlı klasörünüzde bulundu Supporting Filesve * .plist dosyasına tıklayın

resim açıklamasını buraya girin

Uygulamanızın farklı ayarını gösterdikten sonra gösterdi. Sen 2 tuş eklemek gerekir UIStatusBarHiddenve UIViewControllerBasedStatusBarAppearance. Bunu sadece + düğmesine tıklayarak yapabilirsiniz

resim açıklamasını buraya girin

+ Tuşuna bastıktan sonra tuşlardan birini seçebilirsiniz - yazmaya başlayın.

Doğru versiyonu:

resim açıklamasını buraya girin

Ve son olarak bu değişiklikleri uyguladıktan sonra uygulama:

resim açıklamasını buraya girin

Ayrıca, burada alternatif bir çözüm bulabilirsiniz


8

İOS10 olarak yapmak için gerekli tüm ı geçersiz olduğunu prefersStatusBarHiddenbenim var in RootViewController(Swift):

override var prefersStatusBarHidden: Bool {
    return true
}

7

Bunu dene;

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

Harika. Bunu, gerekli olmadığında görünüm denetleyicisindeki durum çubuğunu gizlemek ve ardından kullanıcı oturum
açtıktan

5

İOS7'de durum çubuğunuzu gizlemek için:

Plist dosyanızı açın, ardından "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" adlı bir satır ekleyin ve değerini olarak ayarlayın NO.


5

İşte Swift sürümü (iOS9 öncesi):

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

Bu da işe yarar (iOS7 +):

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

Ayrıca şunu da aramanız gerekir:

setNeedsStatusBarAppearanceUpdate()

sözde viewDidLoad() .

Bir SplitView denetleyicisi veya başka bir containergörünüm denetleyicisi kullanıyorsanız, gönderildiğinde sınıfınızı döndürmesini de unutmayın childViewControllerForStatusBarHidden. Bunu yapmanın bir yolu, kamuya açık bir zayıf değişkene sahip olmak statusControllerve bunu geçersiz kılınan yöntemde döndürmektir.


1
Üst blok iOS8'de kullanımdan kaldırıldı - ikinci yaklaşımınızı kullanın. Ve teşekkürler! Başka bir zorunlu arama eklemek için kodu düzenledim.
David H

5

iOS 9'dan itibaren:

Gibi statusBarHiddenyöntem edildi kullanımdan kaldırıldı gelen iOS9 aşağıdaki şekilde plist iki değeri eklemeniz gerekir:

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

veya Kullanıcı Arayüzü ile Lütfen aşağıdaki görüntüye bakın:

resim açıklamasını buraya girin

Gibi statusBarHiddenbir kullanımdan kaldırıldı gelen iOS9 :

@property (readwrite, atomsuz , getter = isStatusBarHidden) BOOL durumuBarHidden NS_ DEPRECATED _IOS (2_0, 9_0 , "Kullan - [UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


5

SWIFT 3+ için SABİT ÇÖZÜM (iOS 9, 10)

1- Bilgi.plistinde mülkiyetin altında ayarlanmış

resim açıklamasını buraya girin

2- Aşağıdaki kodu Kök denetleyiciye yapıştırın.

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

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Durum çubuğunu isStatusBarHidden = trueve isStatusBarHidden = falseistediğiniz yeri arayabilirsinizhide/show


4

Bu değeri plist'e eklemelisiniz: "Denetleyici tabanlı durum çubuğu görünümünü görüntüle" ve "HAYIR" olarak ayarlayın.


4

İOS'ta durum çubuğunu gizleme adımları
1. AppDelegate.m dosyasını açın , didFinishLaunchingWithOptions yönteminde application.statusBarHidden öğesini ekleyin

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. info.plist dosyasını açın ve ayarlayın

View controller-based status bar appearance Ayarlamak NO


4

Hızlı 5

İOS Durum Çubuğunu gizlemek için aşağıdaki adımları kullanın:

  1. Info.plist'de açın.
  2. Yeni anahtar ekle Denetleyici tabanlı durum çubuğu görünümünü ve HAYIR olarak ayarlanmış değeri görüntüle .
  3. Yeni anahtar ekle Durum çubuğu başlangıçta gizlidir ve değer EVET olarak ayarlanmıştır .
  4. Projeyi yeniden derleyin.
  5. Durum çubuğu şimdi iOS telefonda gizlenmiş olmalıdır.

Son Ayarlar Ekran Görüntüsü:

Son Ayarlar

Bu Xcode 10.2 üzerinde çalışıyor


2

Gönderen 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);

Bu yüzden View controller-based status bar appearanceHAYIR olarak ayarlanmalıdır


2

Susitha'nın sorusunu cevaplamak için: setNeedsStatusBarAppearanceUpdate komutunu kullanın . Bu, prefersStatusBarHistediğiniz durum çubuğu durumuyla yenilemek için bir çağrı yapar. Bunu dene:

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

Durum çubuğunu tekrar görmek istiyorsanız, hideStatusBar özelliğini (veya her ne çağırırsanız arayın) NO olarak ayarlayın. Bir başka çağrı yaparak dolaylı olarak preferStatusBarHidden'ı arayın

[self setNeedsStatusBarAppearanceUpdate]

1

Swift 3 için güncelleme:

Info.plist'i aşağıdaki bilgilerle güncelleyin:

View controller-based status bar appearance: NO

Ardından, bir ViewController içinde veya başka bir yerde:

UIApplication.shared.isStatusBarHidden = true

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.