Pasek stanu nie zniknie


112

Tworzę aplikację i chcę ukryć pasek stanu. Podczas testowania aplikacji pasek stanu jest ukryty, podczas gdy wyświetlany jest ekran powitalny, ale po całkowitym załadowaniu aplikacji pasek stanu pojawia się ponownie.

Używam Xcode 5 i iOS 7 i próbowałem programowo wyłączyć pasek stanu

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

w pliku info.plist i za pomocą inspektora atrybutów w pliku .xib. Wydaje się, że nic nie działa.

Jakieś pomysły?

Odpowiedzi:


220

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
Jak to zrobić globalnie?
jjxtra

16
Ponadto, jak stwierdzono w dokumentacji Apple, należy wywołać [self setNeedsStatusBarAppearanceUpdate];tę metodę po wywołaniu tej metody z czymś innym niż wartość domyślna (wartość domyślna to NIE).
manderson

3
@PsychoDad Sprawdź moją odpowiedź, aby uzyskać bardziej globalne rozwiązanie.
Idan,

2
Perfekcyjnie, dziękuję. Po prostu nie mogę zrozumieć, dlaczego iOS 7 to robi i nie szanuje plików XIB, które NIE zawierają ustawień paska stanu!
justinhartman,

1
Dodanie tego do ViewController dodanego do stosu to wszystko, czego potrzebowałem, aby ukryć pasek stanu w tym kontrolerze widoku; pasek stanu powraca po usunięciu tego kontrolera widoku.
MacD

126

Należy dodać tę wartość do plist: „ Wyświetl wygląd paska stanu na podstawie kontrolera ” i ustawić ją na „ NIE ”.

Umożliwi to ustawienie paska stanu w trybie ukrytym . To ustawia ją na globalną, w przeciwieństwie do innych podanych odpowiedzi.

AKTUALIZACJA: Jeśli chcesz, aby pasek stanu był ukryty na ekranie powitalnym, nie zapomnij zaznaczyć opcji „ Ukryj podczas uruchamiania aplikacji ” w opcjach paska stanu. Możesz również dodać na liście „ Pasek stanu jest początkowo ukryty ” do „ TAK ”, jeśli nie chcesz tego robić z kodem w aplikacji.


2
Zajęło mi dużo czasu, żeby to rozgryźć. Myślę, że jest to problem, który miałby każdy, a Apple nie wspomina o nim wystarczająco. cieszę się, że mogę pomóc ...
Idan,

7
działa dobrze, nie zapomnij ustawić wartości .plist dla „Pasek stanu jest początkowo ukryty” na TAK.
Andreas-supersmart

1
Wow, to była jedyna rzecz, która działała z Kobold2d 2.1.0 i iOS 7, bardzo dziękuję!
Binarian,

5
Apple nie jest tak naprawdę mistrzami wstecznej kompatybilności. Zatańczmy wszyscy do ich fletu i zaktualizujmy każdą z naszych aplikacji. Przepraszam, wyładowuję frustrację. Spowodowane przez Apple.
Henrik Erlandsson

1
w końcu to działa dla mnie. Ponieważ - (BOOL) preferuje metodę statusbarhidden nie działającą w modelview.
utkal patel

73

Opublikowany kod działa na iOS 6.1 i starszych. W systemie iOS 7 firma Apple udostępniła nowe metody bezpośredniego sterowania paskiem stanu dla każdego widoku. Wyłączenie tej opcji w Info.plist umożliwi ukrycie paska stanu, przynajmniej dla bieżącego Podglądu programisty (4).

Dodaj to i ustaw na NIE

Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem przejścia na iOS 7, który jest dostępny w portalu deweloperów Apple.


3
Moim zdaniem ta odpowiedź jest lepsza, ponieważ w mojej aplikacji chcę ukryć pasek stanu tylko w trybie poziomym, dzięki!
Son Nguyen

dzięki, to pomaga mi, ponieważ chcę ukryć to dla całej mojej aplikacji
kevinl

2
Moim zdaniem ta odpowiedź powinna być najlepszą odpowiedzią -> Wyjaśniono tutaj developer.apple.com/library/prerelease/ios/documentation/ ...
marceloquinta

5
Zrobiłem to, ale wygląda na to, że właśnie ukrył pasek stanu, jednak moja aplikacja jest nadal „wypychana” przez ilość miejsca, jaką zajmuje pasek stanu, i nadal widzę wskaźnik baterii!
vedran

36

cóż, próbuję ukryć pasek stanu w całej mojej aplikacji oraz w "app" -info.plist i dodaję dwa wiersze do słownika "Lista właściwości informacji" Dodam "Wyświetl wygląd paska stanu kontrolera" ustaw NIE i w " Pasek stanu jest początkowo ukryty "ustaw TAK i u mnie działa n_n '

plist info


2
Zmusza to twoją aplikację do trybu zgodności zaprojektowanego wyłącznie po to, aby stare aplikacje działały zgodnie z przeznaczeniem w systemie iOS 7, gdy programiści nie mają czasu na naprawianie aplikacji pod kątem nowego sposobu działania. Zamiast tego należy zaimplementować metody prefer * w kontrolerach widoku.
lhunath

17

Jeśli jednak używasz UIImagePicker, pasek stanu pojawi się ponownie.

W takim przypadku powinieneś ukryć pasek stanu jak poniżej,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
Mam ten sam problem. Pasek stanu jest ukryty, dopóki nie użyję UIImagePicker. Wypróbowałem twoje rozwiązanie i nie działa dla mnie. Czy musiałem dodać coś poza kodem w twoim poście?
Dev01,

@WootWoot Dodałem również - (BOOL) prefersStatusBarHidden {return YES; }, aby wyświetlić kontrolery. Proszę, spróbuj.
alones

wydaje mi się, że na mnie nie działa .. czy faktycznie powinieneś zadzwonić setNeedsStatusBarAppearanceUpdate?
RyanM

Muszę ukryć pasek stanu po kliknięciu przycisku. Próbowałem poniżej kodu, ale nie zadziałało. Czy ktoś może mi pomóc. [[UIApplication sharedApplication] setStatusBarHidden: YES];
janitheshan

8

Po długich poszukiwaniach w końcu znalazłem bardzo proste rozwiązanie, które również rozwiązuje UIImagePickerControllerproblem.

Jak wspomniano w innych odpowiedziach, ustaw pasek stanu jako ukryty w AppDelegate didFinishLaunching i ustaw opcję „Wyświetl wygląd paska stanu na podstawie kontrolera” na NIE.

Następnie w AppDelegate:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - Twój pasek stanu pozostanie ukryty, nawet jeśli UIImagePickerController jest najważniejszy.

Jest to lepsze niż „ponowne ukrywanie” go za każdym razem, gdy prezentujesz UIImagePickerController, ponieważ pozostaje on ukryty w całej aplikacji.


2
Chociaż nadal wydaje się, że coś jest zepsute w iOS7 przynajmniej na iPadzie - UIImagePickerController nadal wyświetla pasek stanu przy drugim wyświetleniu ... Hurrrr ... :-( Obecnie używam appDelegate i ukrywam ją ponownie w każdym widoku . Więc nawet jeśli wygląda na brudny przez krótką chwilę, szybko się naprawia.
ikuramedia

1
Jest to jedyna metoda, która zadziałała dla mnie na iOS8 ... w jakiś sposób preferujeStatusBarHidden nie jest wywoływana na moim kontrolerze widoku.
mojuba

7

Aby ukryć pasek stanu na określonym kontrolerze UIViewController, po prostu dodaj to:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Mam nadzieję że to pomoże !


!! To jest rozwiązanie, które działało u mnie w iOS 9.2, modyfikowanie plist nie dało żadnego efektu.
mico

5

Możesz ukryć się w podsumowaniu projektu. podczas uruchamiania znajduje się pole wyboru ukryte.

Zobacz migawkę

wprowadź opis obrazu tutaj


4

Znalazłem to rozwiązanie dla siebie. To działa jak urok. Napisz ten kod na swoim viewcontroller, na którym chcesz użyć UIImagePickerController.

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

3

Oprócz odpowiedzi od alones powyżej, pamiętaj, aby zaimplementować metodę imagePickerControllerDidCancel i dodać tam ten sam kod.


2

Miałem również problemy z UIImagePicker. Podobnie jak w przypadku odpowiedzi Alonesa, moje rozwiązanie było następujące. Dodałem tę linię lub kod:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

do tej funkcji:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Nie testowałem tego z iOS 6 lub starszym, ale działa świetnie w iOS 7.


2

Szybkie rozwiązanie

po prostu dodaj to do swoich kontrolerów widoku:

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

0

Używam Xcode 6, to rozwiązanie działa na iOS 7 i 8 dla mnie:

Najpierw ustaw „Wyświetl wygląd paska stanu opartego na kontrolerze” na NIE w pliku plist.

Po drugie, w AppDelegate dodaj to:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

Mój problem polegał na tym, że użyłem ograniczenia kontrolera widoku. Tylko najwyżej położony kontroler widoku, na przykład osadzony w kontrolerze nawigacji, może ukrywać lub wyświetlać pasek stanu.

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.