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.