Mam, ViewController
który jest wewnątrz a UINavigationcontroller
, ale pasek nawigacji jest ukryty. Kiedy uruchamiam aplikację na iOS 7, pasek stanu pojawia się u góry mojego widoku. Czy jest sposób, aby tego uniknąć?
Nie chcę pisać żadnego kodu specyficznego dla systemu operacyjnego.
Próbowałem ustawienie View controller-based status bar appearance
się NO
, ale to nie rozwiąże problemu.
Odpowiedzi:
Xcode 5 ma
iOS 6/7 Deltas
specjalnie stworzony do rozwiązania tego problemu. W scenorysie przeniosłem moje widoki o 20 pikseli w dół, aby wyglądały dobrze na iOS 7 i aby był kompatybilny z iOS 6, zmieniłemDelta y
na -20.Ponieważ moja storyboard nie korzysta z automatycznego układu, w celu zmiany rozmiaru wysokość poglądów prawidłowo na iOS 6 musiałem ustawić
Delta height
jak równieżDelta Y
.źródło
Jeśli po prostu NIE chcesz żadnego paska stanu, musisz zaktualizować plist o te dane: Aby to zrobić, w pliku plist dodaj te 2 ustawienia:
W systemie iOS 7 oczekuje się, że projekt aplikacji zostanie zaprojektowany z uwzględnieniem nałożonego przezroczystego paska stanu. Zobacz na przykład nową aplikację Pogoda na iOS 7.
źródło
Jest to domyślne zachowanie
UIViewController
w systemie iOS 7. Widok będzie pełnoekranowy, co oznacza, że pasek stanu będzie zakrywał górną część widoku.Jeśli masz
UIViewController
wewnątrz a,UINavigationController
a navigationBar jest widoczny, możesz mieć następujący kod w swoimviewDidLoad
lub mieć obraz tła dla navigationBar.Jeśli masz ukryty NavigationBar, musisz dostosować wszystkie elementy UIView, przesuwając o 20 punktów. Nie widzę innego rozwiązania. Użyj układu automatycznego, aby trochę pomóc.
Oto przykładowy kod do wykrywania wersji systemu iOS, jeśli chcesz zachować zgodność z poprzednimi wersjami.
źródło
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
Jedyne działające rozwiązanie, które stworzyłem samodzielnie.
Oto moja podklasa UIViewController https://github.com/comonitos/ios7_overlaping
1 Podklasa z UIViewController
2 Utwórz podklasę window.rootViewController z tej klasy.
3 Voila!
4 Dodaj to, aby pasek stanu był biały Zaraz po [self.window makeKeyAndVisible]; !!!
źródło
Dodaj klucz w plist --- Wyświetl wygląd paska stanu opartego na kontrolerze: NIE
źródło
Aby ukryć pasek stanu w ios7, wykonaj następujące proste kroki:
W Xcode przejdź do
Resources
folderu „ ” i otwórz „(app name)-Info.plist file
”.View controller based status bar appearance
klucz „ ” i ustaw jego wartość „NO
”Status bar is initially hidden
klucz „ ” i ustaw jego wartość „YES
”Jeśli nie ma tam kluczy, możesz je dodać, wybierając „
information property list
” u góry i klikając ikonę +źródło
Jeśli chcesz to całkowicie ukryć i po prostu uniknąć radzenia sobie z tym, działa to dobrze.
odniesienie https://stackoverflow.com/a/18873777/1030449
źródło
Jeśli używasz
xib
s, bardzo prostą implementacją jest hermetyzacja wszystkich podglądów podrzędnych w widoku kontenera z flagami zmiany rozmiaru (których będziesz już używać do zgodności 3,5 "i 4") , aby hierarchia widoku wyglądała mniej więcej taka potem
viewDidLoad
zrób coś takiego:W ten sposób końcówki nie muszą być modyfikowane w celu zapewnienia zgodności z systemem iOS 7. Jeśli masz tło, możesz je trzymać na zewnątrz
containerView
i pozwolić, aby obejmowało cały ekran.źródło
To wszystko, co jest potrzebne, aby usunąć pasek stanu.
źródło
W przypadku paska nawigacji:
Pisanie tego kodu:
właśnie załatwił mi sprawę.
źródło
Odpowiedzi Vincenta na krawędzie ForExtendedLayout zadziałały dla mnie.
Te makra pomagają w określaniu wersji systemu operacyjnego, ułatwiając to
dodaj te makra do pliku prefix.pch projektu i możesz uzyskać do nich dostęp w dowolnym miejscu
źródło
Opublikowałem swoją odpowiedź na inny post z tym samym pytaniem z tym.
Z Przewodnika przejścia na Apple iOS7, https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1
Konkretnie
automaticallyAdjustsScrollViewInsets=YES
iset self.edgesForExtendedLayout = UIRectEdgeNone
pracuje dla mnie, kiedy nie chce się do nakładania i mamtableviewcontroller
.źródło
Jeśli chcesz, aby opcja „Użyj automatycznego układu” była włączona za wszelką cenę, umieść następujący kod w pliku viewdidload.
źródło
Mój pasek stanu i pasek nawigacji nakładają się na siebie po powrocie z widoku poziomego YTPlayer. Oto moje rozwiązanie po wypróbowaniu wersji @comonitos, ale nie działa na moim iOS 8
Po prostu wywołaj tę funkcję, gdy chcesz naprawić pozycję paska nawigacji. Zadzwoniłem na YTPlayerViewDelegate's
playerView:didChangeToState:
źródło