W moim pliku .plist mam ustawioną opcję „ Wyświetl wygląd paska stanu na podstawie kontrolera ” NO
. Ale potem UIImagePickerController
moja aplikacja zachowuje się tak, jakby ta opcja była ustawiona na YES
.
W mojej aplikacji przedstawiam VC, który przedstawia plik UIImagePickerController
.
Problem wygląda tak:
- Po zaprezentowaniu selektora zdjęć po wybraniu biblioteki zdjęć zmienia się kolor tekstu paska stanu.
- Następnie, po
UIImagePickerController
odrzuceniu, odstępy między paskiem stanu zmieniają się dla reszty mojej aplikacji, a cały pasek nawigacji dla innych kontrolerów wyświetla się pod paskiem stanu.
Czy istnieje sposób na rozwiązanie tego problemu bez zarządzania paskiem stanu w moich kontrolerach widoku?
Odpowiedzi:
Żadne z powyższych rozwiązań nie działało dla mnie, ale łącząc odpowiedzi Rich86man i iOS_DEV_09, otrzymałem konsekwentnie działające rozwiązanie:
i
Co do tego niesamowitego rozwiązania. W przypadku 2014 / iOS8 odkryłem, że w niektórych przypadkach musisz RÓWNIEŻ dołączyć
prefersStatusBarHidden
i, być może,childViewControllerForStatusBarHidden
więc ...Mam nadzieję, że to komuś pomoże
źródło
Zmierzyłem się dzisiaj z tym samym problemem. Oto moje rozwiązanie.
W kontrolerze widoku, który wywołuje selektor obrazów, ustaw siebie jako delegata selektora obrazów. (Prawdopodobnie już to robisz)
Ponieważ UIImagePickerController jest typem kontrolera nawigacji, ustawiasz również siebie jako delegata UINavigationController. Następnie :
Zastąp UIStatusBarStyleLightContent dowolnym stylem, którego szukasz.
źródło
Zaakceptowana odpowiedź będzie działać, jeśli opcja „Wyświetl wygląd paska stanu na podstawie kontrolera” jest ustawiona na NIE w pliku .plist. Jeśli rzeczywiście potrzebujesz kontrolować pasek stanu w innych kontrolerach widoku i mieć tę opcję ustawioną na TAK, innym sposobem, aby UIImagePickerController zachowywał się poprawnie, jest tworzenie podklasy
źródło
stanąłem przed tym samym problemem.
oto moje rozwiązanie. umieść to w viewWillAppear kontrolera widoku, z którego otwierasz widok wyboru obrazu
źródło
Możesz tego spróbować. Myślę, że needStatusBarApperanceUpdate będzie działać.
źródło
Zauważyłem, że zapewnia to właściwą obsługę, składa się z dwóch części.
sam UIImagePickerController przedstawia kontrolery widoku, więc ten delegat działa dla wszystkich osób prowadzących na stosie.
viewWillAppear zapewnia, że sam kontroler widoku jest zawsze resetowany za każdym razem, gdy kontroler widoku prezentacji zostanie zwolniony nad nim.
źródło
Miałem ten sam problem. Dodaj listę informacji: „Wyświetl wygląd paska stanu opartego na kontrolerze” z wartością „NIE”
Przykład tutaj https://stackoverflow.com/a/19211669
To rozwiązanie działa na mnie.
źródło
To prawdopodobnie błąd. Rozwiązałem problem, ustawiając „Wyświetl wygląd paska stanu na podstawie kontrolera” na TAK i w każdym widoku kontrolera wklejając w następującym kodzie:
Moja aplikacja zachowuje się wtedy zgodnie z oczekiwaniami.
źródło
Aby ukryć pasek stanu w UIImagePicker:
-
a gdy UIImagePicker zostanie odrzucony, aby ukryć pasek stanu w kontrolerze View, użyj następującego kodu:
źródło
Spróbuj tego ....
zadziała w obu przypadkach, tj. niezależnie od tego, czy używasz presentModalViewController i pushViewController
metody delegowania
źródło
To wszystko nie działa dla mnie. Rozwiązałem problem, zmieniając styl prezentacji na:
źródło
Żadne z powyższych rozwiązań nie zadziałało.
Przedstawiam UIImagePickerController jako kontroler widoku modalnego. Po zamknięciu UIImagePickerController stan paska stanu był następujący:
Rozwiązaniem, które rozwiązało ten problem, było przywrócenie statusuBarOrientation po zamknięciu UIImagePickerController:
źródło
Ten kod pomógł mi dostosować styl paska stanu.
EDYCJA: to rozwiązanie działa, jeśli „Wyświetl wygląd paska stanu na podstawie kontrolera” == TAK
źródło
Wszystkie powyższe odpowiedzi są w porządku i mogą pomóc.
Miałem ten sam problem z zarządzaniem aplikacją działającą pod różnymi wersjami iOS .
Następnie w delegacie:
źródło
Jeszcze jedno rozwiązanie, które może się sprawdzić w niektórych sytuacjach.
źródło
Czy próbowałeś zadzwonić,
[self setNeedsStatusBarAppearanceUpdate]
gdy ponownie pojawi się kontroler widoku prezentacji?źródło
Próbuję ukryć pasek stanu w UIImagePickerController w iOS7, ale nadal nie wiem, jak to zrobić. używam
w ViewController, które wywołują UIImagePickerController i ustawiają „Wyświetl wygląd paska stanu opartego na kontrolerze = NIE” w pliku plist. Mam nadzieję, że to pomoże.
źródło
Spróbuj tego :
aw implementacji protokołu użyj tego:
źródło
To rozwiązało to dla mnie ...:
źródło
Nic tutaj nie rozwiązało problemu, który miałem (i być może, że OP też miał), więc pomyślałem, że podzielę się swoją odpowiedzią. Zamiast ukrywać pasek stanu, który moim zdaniem jest błędnym rozwiązaniem (zauważyłem, że czasami pozostawiał moją aplikację w stanie, w którym pasek stanu był ukryty, gdy nie powinien). Zamiast tego zdecydowałem się na dobrą zabawę z
UIStatusBarStyles
.Kiedy UIImagePickerController ma swój widok, ustawiłem styl paska stanu na domyślny, ponieważ domyślnym kolorem tła jest jasnoszary.
Następnie, gdy selektor obrazów zostanie zamknięty, ustawiłem go z powrotem na
UIStatusBarStyleLightContent
.źródło
W tym przypadku używamy 2 kroków
W pierwszym kroku: Dodaj w info.plist: „Wyświetl wygląd paska stanu na podstawie kontrolera” z wartością „NIE”
W drugim kroku: użyj / wywołaj ten kod z delegatem UIImagePickerController
W przypadku IOS-7 dodaj jeszcze jedną funkcję
źródło
Od wersji iOS 8.1 wygląda na to, że w końcu naprawili ten błąd! Udało mi się usunąć wszystkie zastosowane obejścia z mojego kodu.
źródło
Używając domyślnego zachowania iOS 8, miałem problemy z wyświetlaniem paska stanu, gdy chciałem go ukryć.
Rozwiązanie, które znalazłem, było takie, że bezpośrednio po wywołaniu
presentPopover
z kontrolera widoku zrobiłem:Musiałem też dodać to do mojego głównego kontrolera widoku:
źródło
Więc miałem ten problem i udało mi się go rozwiązać, po prostu implementując jedną funkcję delegata. Tło mojego paska stanu jest czarne, a więc UIStatusBarStyle dla mojej aplikacji to .LightContent. Kiedy przedstawiłem UIImagePickerController, aby wybrać zdjęcie z pamięci urządzenia, pasek stanu był w porządku. Jednak po kliknięciu katalogu, takiego jak „Rolka z aparatu” lub „Ulubione”, i efektywnym przeniesieniu na stos nawigacji, pasek stanu zniknął. Po wybraniu zdjęcia w ogóle nie było paska stanu; po odrzuceniu innego kontrolera widoku modalnego była obecna tylko bateria, co wskazuje, że pozostała część paska stanu może być również czarna.
Wypróbowałem kilka innych rozwiązań, takich jak rozszerzenie UIImagePickerController, ale w Swift nie można nadpisać za pomocą rozszerzeń. Następnie próbowałem podklasować UIImagePickerController i próbowałem ukryć jego pasek stanu w viewWillAppear () i odkryć pasek stanu w viewWillDisappear. Udało mi się zobaczyć ukrywanie paska stanu za pomocą animacji .Slide, ale ponieważ pasek stanu był niewidoczny po wybraniu katalogu, nie byłem w stanie wyświetlić paska stanu. Ponownie, zielona bateria wróciła, a reszta paska stanu była niewidoczna po zamknięciu kontrolera widoku modalnego. Próbowałem również przesłonić prefersStatusBarHidden (), ale ta funkcja nigdy nie została wywołana, więc próbowałem wywołać metodę setNeedsStatusBarAppearanceUpdate (), aby upewnić się, że system wywołuje metodę prefersStatusBarHidden (), ale nadal nie jest wywoływana. Również, istnieje sugestia, aby ustawić pasek stanu tak, aby był ukryty w metodzie delegata navigationController willShowViewController. Po raz kolejny wszystko to powoduje ukrycie paska stanu, co nie rozwiązuje problemu. Jak się okazuje, wydaje się, że styl paska stanu zmienia się po umieszczeniu na stosie nawigacyjnym UIImagePickerController. Aby całkowicie rozwiązać problem, nie musiałem pisać rozszerzeń ani podklasy UIImagePickerController. Wszystko, co musisz zrobić, to ustawić delegata i ustawić styl paska stanu na ten sam. Ten dodatek sprawił, że problem nigdy nie istniał. wydaje się, że styl paska stanu jest zmieniany po umieszczeniu na stosie nawigacyjnym UIImagePickerController. Aby całkowicie rozwiązać problem, nie musiałem pisać rozszerzeń ani podklasy UIImagePickerController. Wszystko, co musisz zrobić, to ustawić delegata i ustawić styl paska stanu na ten sam. Ten dodatek sprawił, że problem nigdy nie istniał. wydaje się, że styl paska stanu jest zmieniany po umieszczeniu na stosie nawigacyjnym UIImagePickerController. Aby całkowicie rozwiązać problem, nie musiałem pisać rozszerzeń ani podklasy UIImagePickerController. Wszystko, co musisz zrobić, to ustawić delegata i ustawić styl paska stanu na ten sam. Ten dodatek sprawił, że problem nigdy nie istniał.
źródło
Właściwie znalazłem lepszy sposób na ustawienie koloru tła paska stanu w Próbniku obrazów. Zasadniczo musisz ustawić backgroundImage z NavigationBar na nil, ponieważ domyślnie w selektorze obrazów ma backgroundImage jako biały obraz.
źródło