Próbuję utworzyć interfejs podobny do aplikacji Photos, w której pasek stanu będzie się pojawiał/znikał, ale mam problem. Jeśli stuknę, aby ukryć interfejs, obróć urządzenie, a następnie dotknij, aby je przywrócić, a następnie pasek nawigacji zostanie przestawiony pod paskiem stanu (patrz zdjęcie). Jeśli następnie obrócę urządzenie, pasek nawigacji wróci do właściwego miejsca. Jak mogę to naprawić?UINavigationBar pojawia się pod paskiem stanu
Odpowiedz
Może się to wydać trochę późno, ale miałem dokładnie ten sam problem. Wyznaczałem widok czytelnika na pełnym ekranie z przezroczystym paskiem stanu, paskiem nawigacyjnym i paskiem narzędzi, które można było znikać i wchodzić, dotykając środka ekranu.
Sposób, w jaki udało mi się to naprawić, jest naprawdę prosty, zasadniczo stanowi sedno problemu, jeśli: Po obróceniu widoku i NavigationController ponownie oblicza swoją nową pozycję, uważa, że powinien znajdować się w górnej części okna ponieważ pasek stanu jest ukryty. Po wyświetleniu zarówno paska stanu, jak i paska nawigacji, nakładają się one.
Sposób na naprawienie tego jest naprawdę łatwy, wystarczy zachować BOOL, aby zapamiętać, czy nakładka jest pokazana lub ukryta, i wdrożyć zarówno willRotateToInterfaceOrientation i willAnimateRotationToInterfaceOrientation w swoim ViewController.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (!isOverlayShowing)
{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (!isOverlayShowing)
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
przez szybkiego wskazywania i ukrywanie StatusBar w obu sposobach StatusBar przedstawiono dokładnie w momencie NavigationBar ponownie oblicza swoją pozycję. Nie wiem, czy to najlepsza implementacja, aby rozwiązać ten problem, ale jak dotąd ta metoda działa i nie powoduje migotania na ekranie i jest bardzo płynna.
Mam nadzieję, że ktoś inny z moim problemem może natknąć się na to stanowisko i znaleźć to łatwe rozwiązanie tego problemu.
Niestety, to trochę denerwujące. Ukrywając pasek stanu, otwiera on w zasadzie to miejsce, z którego mogą korzystać kontrolery uiview. Po włączeniu autoregulacji, w zasadzie wprowadzi się w tę przestrzeń, ponieważ nie ma pojęcia, że będziesz chciał ponownie użyć tej przestrzeni.
Najlepiej jest ręcznie zmienić rozmiar widoku, aby po ponownym wyświetleniu paska stanu można również zgnieść widok w dół, tak aby był poprawnie umieszczony pod paskiem stanu.
Innym (prostszym) rozwiązaniem jest resetowanie ramki widoku najwyższego poziomu po ponownym wyświetleniu paska stanu; na przykład
- (void)exitFullScreenMode
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
// work-around for navigation bar appearing under status bar - must be called before -setNavigationBarHidden:
self.view.window.rootViewController.view.frame = [UIScreen mainScreen].applicationFrame;
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
if (self.navigationController.navigationBarHidden)
{
/******* Cancel Fullscreen ****/
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.navigationController setToolbarHidden:NO animated:YES];
}
else {
/******* Enable Fullscreen ****/
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController setToolbarHidden:YES animated:YES];
}
miałem problemy ustawień alfa = 0 do navigationBar aby go schować. Więc jak widać, po wywołaniu:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
można usunąć navigationBar wywołując ukryty i ponowne włożenie go do widoku, a następnie ustawiając alfa = 0:
//hiding and showing to redraw navigationBar over the status bar
self.navigationController.navigationBarHidden = YES;
self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.alpha = 0;
to rozwiąże dodatkowa miejsce, w którym znajdował się pasek stanu.
Poprawiono ten problem poprzez:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
self.navigationController.navigationBarHidden = YES;
self.navigationController.navigationBarHidden = NO;
- 1. iPhone UIViewController przechodzi pod paskiem stanu
- 2. UITableView z UIRefreshControl pod półprzezroczystym paskiem stanu
- 3. Pasek narzędzi przewijany pod paskiem stanu
- 4. Elewacja appbarlayout systemu Android pojawia się na pasku stanu
- 5. Jak dodać pasek na górze ekranu iphone (pod paskiem stanu)?
- 6. Wyświetlanie pod paskiem stanu w symulatorze iPhone X zniekształcone
- 7. Pełny ekran HTML na urządzeniu z iOS znajduje się pod paskiem stanu
- 8. Dlaczego UIViewController rozszerza się pod UINavigationBar, a UITableViewController nie?
- 9. "1" cyfra pojawiająca się pod paskiem bocznym strony wordpress
- 10. Wykonaj bottomSheetDialog pełny ekran nad paskiem stanu
- 11. dismissModalViewController Ukrywa widok rodzica za paskiem stanu
- 12. Przechwytywanie ekranu iPhone'a z dołączonym paskiem stanu?
- 13. Pozycjonowanie "opakowania" div pod stałym paskiem nawigacyjnym?
- 14. Android BottomSheet: Czy hinding pod paskiem narzędzi
- 15. Układ koordynatora, czynność pod paskiem narzędzi
- 16. winforms - etykieta z etykietami stanu nie pojawia się
- 17. css Wyższy indeks zera pojawia się pod niższym
- 18. Aktualizacja pod repo nie pojawia się błąd w cocoapods
- 19. Widok kontrolera rysuje się pod moim paskiem nawigacyjnym po pojawieniu się ttthumbsviewcontroller
- 20. Pasek stanu pojawia się, gdy pojawia się klawiatura ale nie ukryte z powrotem, gdy klawiatura znika natomiast w trybie Immersive
- 21. Jak zrobić tło UINavigationBar przezroczyste?
- 22. Pasek stanu pojawia się ponad granicami mojego widoku w iOS 7
- 23. Android: Jak usunąć linię między paskiem narzędzi a pasek stanu
- 24. UITableView wskaźnik przewijania pod UINavigationBar po modyfikacji contentEdgeInset
- 25. Autoukład w iOS - Prawidłowa prezentacja widoku pod półprzezroczystym paskiem nawigacyjnym
- 26. Autolayout ignoruje UITabBar (zawartość pod paskiem) na iOS7
- 27. Pojawia się okno Autohotkey
- 28. UISearchBar Nie pojawia się
- 29. Jak wyłączyć linię pod paskiem narzędzi w winform C#?
- 30. Jak wyświetlić pozycję pod zielonym paskiem podczas rozmowy telefonicznej?
Dziękuję.To doprowadzało mnie do szału. – bdmontz
Wow, łał. To jest rozwiązanie, którego szukałem! Mój problem polegał na tym, że jeśli użytkownik zamknął aplikację, obrócił urządzenie i ponownie je uruchomił, uzyskałbym nałożony pasek stanu. Nie przyszło mi nawet do głowy, że być może obroty zostały wystrzelone z podpowiedzi o ponownym uruchomieniu. To rozwiązuje to! – Shizam
Ty, dobry Panie, jesteś dżentelmenem, uczonym i rycerzem. –