Nie można ukryć paska stanu w iOS7


267

Właśnie zaktualizowałem swój iPhone 5 iOS 7 do wersji beta 4. Teraz, gdy uruchamiam moją aplikację z Xcode 5 na tym iPhonie, pasek stanu nie ukrywa się, nawet jeśli powinien.

Nie działa:

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

Nie działa:

[UIApplication sharedApplication].statusBarHidden = YES;

Nie można zalogować się na forach programistów Apple


15
Nieprawda, moja odpowiedź dotyczyła Xcode i została pokazana opinii publicznej. Zbyt ogólne jest powiedzenie „jeśli odpowiesz na to, jest to naruszenie NDA” .. pozwól programistom zdecydować o tym sami ;-)
Jake


jak ukryć pasek stanu konkretnie programowo ViewController?
bhavik

Odpowiedzi:


558

w pliku plist aplikacji dodaj wiersz nazwij go „Wyświetl pasek stanu oparty na kontrolerze” i ustaw go na NIE

Pamiętaj, że to po prostu nie działa, jeśli używasz UIImagePickerController w aplikacji.

z http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , rozwiązanie mgiroux

Przykład dodania View Base Controller do ustawień Info w Xcode


3
Niesamowity! Tracę na tym godziny! Dziękuję Ci!
Idan,

12
Dla odniesienia nazywana jest surowa wartość przechowywana w aktualnym pliku Info.plist UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield

55
Jedynym problemem związanym z tym podejściem jest użycie UIImagePickerController do wybrania obrazów, co zmusi pasek stanu do ponownego pojawienia się. Jedynym pewnym sposobem, aby temu zapobiec, jest zaimplementowanie metody prefersStatusBarHidden w każdym z kontrolerów widoku i zresetowanie UIViewControllerBasedStatusBarAppearance ustawienie plist, aby było prawdziwe.
Jason Fuerstenberg

5
Naprawdę nie wiem, dlaczego Apple to zmieniło! Dzięki :)
Mohamed Amine,

18
Trzeba także zestaw Status bar is initially hiddendo TAK .
Zorayr

277

Dodaj metodę w kontrolerze widoku.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
Dla wszystkich szukających jest to sposób na zrobienie tego, jeśli chcesz dynamicznie usunąć pasek stanu w niektórych widokach. Ta metoda działa bez względu na to, co ustawiłeś w opcji „Wyświetl wygląd paska stanu opartego na kontrolerze” na liście odtwarzania!
Pan T

2
+1 b / c Szukam możliwości dynamicznego pokazywania / ukrywania paska stanu. Metoda ustawiania listy P (patrz post @Satgi powyżej) jest jednak najlepszym sposobem na globalne wyświetlanie / ukrywanie paska stanu.
JonnyB,

Jeśli masz gdzieś galerię zdjęć, zwykle chcesz ukryć elementy sterujące tylko tam i możesz ją również włączyć / wyłączyć. Dla mnie to nie działa, funkcja nawet nie jest wywoływana. Mam w tym samym miejscu preferowanyStatusBarStyle i nazywa się
Cristi Băluță

4
@ Mr.T W iOS 8 wydaje się, że już tak nie jest. Jeśli ustawisz wygląd paska stanu opartego na kontrolerze widoku na NIE i zwrócisz wartość true prefersStatusBarHiddenw kontrolerze widoku, to nie zadziała. Pasek stanu nadal się pojawia.
Isuru

1
@Isuru, dlaczego ustawiłeś NIE? Jeśli ustawisz TAK, w innym przypadku zapytałby każdy kontroler widoku, oczywiście, że nie.
invoodoo

84

W Plist dodaj następujące właściwości.

-> Status bar is initially hidden= TAK

-> View controller-based status bar appearance= NIE

Dodaj oba - teraz pasek stanu zniknie.


Tak, to zadziałało również dla mnie. Bez ustawienia opcji „Pasek stanu jest początkowo ukryty”, aby TAK, nie działa zgodnie z oczekiwaniami. Dzięki.
AndrewShmig,

53

Aby ukryć pasek stanu w jednym widoku, należy użyć:

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

Na początku nie działało to dla mnie, a potem w dokumentacji tej metody zobaczyłem: // Ustawienie statusBarHidden nic nie robi, jeśli aplikacja używa domyślnego systemu paska stanu opartego na UIViewController.

Należy to zrobić w pliku plist, dodając View controller-based status bar appearancezestaw kluczy do NO. A potem zadziałało.


16

Aby użyć starszej metody UIApplication do ukrywania / wyświetlania paska stanu, aplikacja musi ustawić wartość plist dla systemu iOS 7:

View-Controller Based Status Bar Appearance = NO

Domyślnie ta wartość jest ustawiona na TAK. Jeśli zmienisz go na NIE, możesz użyć starszych metod. Jeśli pozostawisz ustawienie TAK, nadal możesz ukryć pasek stanu, ale to zależy od każdej podklasy kontrolera widoku w Twojej aplikacji, aby zastąpić: prefersStatusBarHiddenzwrócić TAK.

Za każdym razem, gdy aplikacja wymaga zmiany wyglądu paska stanu lub widoczności, a Wygląd paska stanu na podstawie kontrolera jest ustawiony na TAK, twój najbardziej zewnętrzny kontroler widoku musi zadzwonić:

setNeedsStatusBarAppearanceUpdateAnimation


Musiałem aplikować w niestandardowych właściwościach docelowych iOS, ponieważ w ogólnym wykazie nie działał
xarly

16

Aby ukryć pasek stanu w iOS7, potrzebujesz 2 linii kodu

  1. niestosowanie: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionspisać

    [application setStatusBarHidden:YES];
  2. w info.plist dodaj to

    View-Controller Based Status Bar Appearance = NO

2
Aby to posprzątać, jeśli wkładasz to do środka didFinishLaunching, możesz po prostu napisać [application setStatusBarHidden:YES];lubapplication.statusBarHidden = YES;
joel.d

w odpowiedzi może być literówka. „Wygląd paska stanu oparty na kontrolerze = NIE” nie działał dla mnie, ale „Widok paska stanu oparty na kontrolerze = NIE” działał.
tmr

11

Istnieje wiele kombinacji sugerowanych dla tego problemu, ale problem polega na tym, że iOS 6 i 7 używają różnych metod, aby ukryć pasek stanu. Nigdy nie udało mi się ustawić ustawień plist, aby włączyć zachowanie w stylu iOS6 na iOS 7, ale jeśli budujesz swoją aplikację do obsługi iOS 6+, musisz użyć 3 metod jednocześnie, aby upewnić się, że określony kontroler widoku ukrywa status 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];
}

Powinno to działać niezależnie od ustawień Plist.


7

Musiałem zrobić obie zmiany poniżej, aby ukryć pasek stanu:

Dodaj ten kod do kontrolera widoku, w którym chcesz ukryć pasek stanu:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Dodaj to do pliku .plist (przejdź do „informacji” w ustawieniach aplikacji)

View controller-based status bar appearance --- NO

Następnie możesz zadzwonić pod tę linię, aby ukryć pasek stanu:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

Wystarczy dodać te 2 wiersze w pliku info.plist. Naprawi to zarówno iOS7, jak i starszą wersję.

  • Pasek stanu jest początkowo ukryty = TAK
  • Wyświetl wygląd paska stanu na kontrolerze = NIE

Przejdź do projektu i wybierz Cele -> Ogólne i zobacz pole wyboru „Styl paska stanu ... Ukryj podczas uruchamiania aplikacji” zostanie zaznaczone. To zadziała.


6

Wypróbuj tę prostą metodę:

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

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

4

Jedyną rzeczą, która działała dla mnie, było dodanie następujących elementów w liście

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

4

Najłatwiejszą metodą ukrywania paska stanu w całej aplikacji, jaką znalazłem, jest categorywłączenie UIViewControlleri zastąpienie prefersStatusBarHidden. W ten sposób nie musisz pisać tej metody w każdym kontrolerze widoku.

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

najlepsze prawdziwe, iOS7, nie fałszywe rozwiązanie, świetne
Fattie

3
  1. Dodaj do listy ----

    Zobacz wygląd paska stanu kontrolera --- NIE

  2. W każdym widoku kontroler pisz

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

W przypadku problemu z paskiem stanu w iOS 7, ale celem aplikacji powinno być 5.1 i więcej


3

Wiele odpowiedzi w tym wątku działa, ale rozumiem, że jeśli próbujesz zrobić coś dynamicznego, w końcu musisz zadzwonić:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

Kroki, aby ukryć pasek stanu w iOS 7:

1. Przejdź do pliku info.plist aplikacji.

2.I Ustaw, Wyświetl wygląd paska stanu na podstawie kontrolera: Boolean NO

Mam nadzieję, że rozwiązałem problem paska stanu .....


3

W przypadku systemu iOS 7 w jednym widoku użyj metody viewWillappear:

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

Do wyświetlenia paska stanu użyj:

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


2

W pliku informacji Plist Dodaj wiersz dla następującej właściwości

Nazwa właściwości: wyświetlanie wyglądu paska stanu opartego na kontrolerze

Wartość: NIE


1

Spróbuj dodać następującą metodę do kontrolera widoku głównego aplikacji:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

Wypróbowałem wszystkie te opcje zamieszczone tutaj w moim projekcie i one nie działały. Pomyślałem, że może to mieć związek z faktem, że zaktualizowałem moją Xcodeaplikację, a następnie aplikację na iOS 7, a niektóre ustawienia zostały gdzieś pomieszane. Postanowiłem zbudować dla niego zupełnie nowy projekt i po prostym ustawieniu: „ Status bar is initially hidden = YES” i „ View controller-based status bar appearance = NO”, jak stwierdzono przez wiele innych, działał poprawnie (tj. Bez paska stanu).

Więc moja rada, jeśli pracujesz nad projektem, który został zaktualizowany do iOS 7 ze starej wersji i wypróbowałeś wszystkie inne opcje, jest zbudowanie nowego projektu.


Użyłem tej samej techniki, aby początkowo potwierdzić, że mogę ukryć pasek stanu globalnie dla każdego ekranu, ale ponieważ moja aplikacja jest dość „zorientowana na czas”, chciałem wyświetlać czas dla większości ekranów. To tylko jeden ekran, który chciałem wykluczyć z różnych powodów. Skończyło się na tym, że użyłem przeciwieństwa twoich parametrów: początkowo ukryty = NIE i oparty na VC wygląd paska stanu = TAK. Następnie musiałem umieścić (BOOL) metodę preferujeStatusBarHidden (zwracając TAK) w jednym VC, w którym chciałem ją ukryć. Działa ładnie. Powinienem dodać, że moja aplikacja jest przeznaczona tylko na iOS7 z innych powodów.
bobsmells

1

Na rok 2019 ...

Aby utworzyć aplikację bez pasków stanu,

Kliknij info.plist, kliknij prawym przyciskiem myszy, aby „Dodaj wiersz”.

Dodaj te dwa z tymi ustawieniami:

wprowadź opis zdjęcia tutaj

To wszystko.




0

Aby ukryć pasek stanu dla określonego viewController

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Aby ustawić pasek stanu Ukryty dla aplikacji:

  • ustawione View controller-based status bar appearancena NOw .plist i w application: didFinishLaunchingWithOptions:zestawie: [application setStatusBarHidden:YES];

    Uwaga: setStatusBarHidden: nieaktualne

LUB

  • w Ustawieniach projektu -> Karta Ogólne -> Informacje o wdrożeniu

    Sprawdzić Hide Status barskrzynkę.


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

Pytanie wyraźnie wspomina, że ​​to podejście nie działa. Przeczytaj uważnie pytanie przed udzieleniem odpowiedzi.
Borys Verebskyi

Dopóki wygląd paska stanu opartego na kontrolerze jest ustawiony na NIE, jest to najczystsze podejście.
Evan Ische,

-7

Nie jestem pewien, dlaczego „nie możesz zalogować się na forach programistów Apple”, ale (bez naruszenia NDA) możesz również ukryć swój pasek statusu za pomocą Xcode. Jest to ogólne ustawienie celu aplikacji.wprowadź opis zdjęcia tutaj


nie, działa jak urok. fora działają już od jakiegoś czasu.
Jake
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.