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

Melih Büyükbayram
źródło
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
możliwy duplikat paska stanu nie zniknie
ekhumoro 11.11.13
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

satgi
źródło
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;
}
invoodoo
źródło
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.

użytkownik1179912
źródło
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.

Debora Fortini
źródł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

jaredsinclair
źródło
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
Shaik Riyaz
źródło
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.

SaltyNuts
źródło
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];
Peter Y
źródło
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.

Sid
źródło
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];
}
Rajesh Loganathan
źródło
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/>
Bartburkhardt
źródło
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
mikrofon
źródło
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

Maulik
źródło
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)];
mroczny serce
źródło
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 .....

chandrika
źródło
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];
oscar castellon
źródło
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
Thunderbird
źródło
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

użytkownik842553
źródło
1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
Bhoopi
źródło
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żytkownik1529408
źródło
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.

Fattie
źródło
0

Dla Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
Irshad Qureshi
źródło
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ę.

Lal Krishna
źródło
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Evan Ische
źródło
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

Jake
źródło
nie, działa jak urok. fora działają już od jakiegoś czasu.
Jake