2013-08-22 13 views
32

Próbowałem przetestować moją aplikację na iOS 7, a następnie znalazłem swój widok nad paskiem stanu ... Jak czytam, w iOS 7 pasek stanu jest ukryty . Jak mogę więc sprawić, by był kompatybilny zarówno z systemem iOS 6, jak i iOS 7? Czy powinienem tworzyć różne pliki .xib dla różnych wersji iOS dla każdego ekranu?Pasek stanu pojawia się ponad granicami mojego widoku w iOS 7

Przeczytałem: Jeśli obie wersje standardowej aplikacji mają podobny układ, użyj funkcji automatycznego układu, aby utworzyć interfejs, który działa poprawnie w obu wersjach systemu iOS. Aby obsługiwać wiele wersji systemu iOS, określ pojedynczy zestaw ograniczeń, których Auto Layout może użyć w celu dostosowania widoków i elementów sterujących w scenorysie lub plikach XIB (aby dowiedzieć się więcej o ograniczeniach, zobacz "Ograniczenia: wyraźne relacje między widokami").

Jeśli obie wersje standardowej aplikacji mają podobny układ, a nie korzystasz z automatycznego układu, użyj przesunięć. Aby użyć przesunięć, najpierw zaktualizuj interfejs użytkownika dla iOS 7. Następnie określ wartości określające początek, wysokość i szerokość każdego elementu we wcześniejszym interfejsie jako przesunięcia z nowej pozycji elementu w interfejsie użytkownika iOS 7.

Ale gdy używam autolayout w .xib, pokazuje błąd, który autolayout jest we wcześniejszej wersji iOS 6.

Jak mogę rozwiązać ten problem?

+2

Powinieneś zadawać pytania związane z ios7 na forum dla programistów Apple, ponieważ wciąż jest ono objęte umową NDA. – cahn

+0

Zobacz ten link: http://stackoverflow.com/questions/17678881/how-to-change-status-bar-text-color-in-ios-7 – Developer

+0

@Developer już przechodzę przez ten link .. to będzie status pasek w jasnoszarym kolorze .. ale mój problem jest ustawiony na ramce ekranu ui ... jak cały mój ekran 20 pikseli w górę w ios7, ale przychodzi normalnie w ios6 ... – Bhrigesh

Odpowiedz

9

Mam ten sam problem. Na razie zrobiłem dwa hacki i zadecyduje, z którym pójdę:

  • Można ukryć pasek stanu całkowicie przez ustawienie UIStatusBarHidden i UIViewControllerBasedStatusBarAppearance true.
  • W mojej aplikacji, stworzyłem ograniczenie Top odstępy o wartości 0, a programmaticaly ją zmienić do 20, jeśli wykryje, że aplikacja działa na iOS 7.

Jak zrobić konto autoLayout dla pasek stanu?


Cóż, wymyśliłem to.

W swoim sub-view (BRSMyListSubViewController w moim przypadku), w viewDidLoad, trzeba ustawić jeden z tych dwóch

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.automaticallyAdjustsScrollViewInsets = NO; 

LUB

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.extendedLayoutIncludesOpaqueBars = YES; 

Co ciekawe, w kontroler widoku głównego , wartości te są domyślnie ustawione na UIRectEdgeAll, NO i YES, ale ich tableView NIE jest pod navbar i stopką.

Nie wiem, dlaczego to takie nielogiczne.

Dziwne jest również to, że edgesForExtendedLayout musi być mieszany z jedną z dwóch innych właściwości, mimo że jest wyraźnie odpowiedzialny za zachowanie.

37

System iOS 7 najwyraźniej obsługuje ukryty pasek stanu dla niektórych widoków, ale nie dla innych. Aby ukryć go na wszystkich widokach, należy wykonać następujące czynności:

  1. Upewnij Hide during application launch jest nadal sprawdzana, w celu wspierania poprzednich wersji OS.
  2. W pliku Info.plist dodaj View controller-based status bar appearance i ustaw go na NO.
  3. Być może będziesz musiał "wyczyścić" przed zbudowaniem (ja tak zrobiłem), ale wtedy twoja aplikacja powinna działać jak poprzednio: żaden pasek stanu nie zwisa z twoich poglądów!
+4

To działało dla mnie, oprócz tego, że pasek stanu pojawia się ponownie po wyświetleniu obiektu UIImagePicker. – Swindler

+1

Ah, znalazłem odpowiedź na pytanie do selektora obrazu tutaj: http://stackoverflow.com/a/18747724/455794 – Swindler

+2

To wydaje się całkowicie ukryć pasek stanu, którego nie chcę robić. Najlepiej byłoby, gdyby moje treści zostały przesunięte, aby pasek stanu nie wskazywał na nie i nie nakładał się na nagłówek mojej aplikacji. FYI Robię aplikację phonegap/cordova. – njtman

24

Prawdopodobnie należy dodać następujący kod do każdego kontrolera widoku.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
    { 
     [self prefersStatusBarHidden]; 
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; 
    } 
    else 
    { 
     // iOS 6 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
    } 
} 

// Add this method 
- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 
+1

+1 działa. –

+1

Wystarczy dodać preferowaną metodę StatusBarHidden. – SG1

+1

@ SG1 preferesStatusBarUkryty jest dostępny tylko dla ios7, więc myślę, że chciałbyś, aby twoja aplikacja działała na ios 6, tak, aby urządzenia na całym świecie posiadały ios7 ;-) – NIKHIL

3

Nie ma potrzeby budowania multi-Xib. Myślę, że Twoim problemem jest "20px": ten sam plik XIB wygląda świetnie w iOS   6, ale brakuje mu 20 pikseli w iOS   7.

Na przykład masz widok i jest to Y = 0. iOS   6, znajduje się u dołu paska stanu. W iOS   7 pojawia się nad paskiem stanu.

Powinieneś użyć Xcode 5, aby otworzyć swoje pliki XIB i włączyć edytor asystenta. Wykonaj następujące kroki:

  1. Wybierz plik inspektora i przełączyć "Zobacz jako" do "iOS 7 i nowszych"

  2. Wybierz rozmiar inspektora, a następnie wypełnij deltaY z "-20"

  3. Zrobione!

+2

To brzmi, jakby to zadziałało, ale nie mogę go dostać działa na moim iPhone 5 w/iOS 7 GM, aplikacja zbudowana z Xcode 5 GM. Twoje rozwiązanie wydaje się nie mieć żadnego efektu. Próbowałem też oczyścić projekt. – njtman

+0

Zrobiło to sztuczkę :), ale musisz ustawić w każdym widoku/podglądzie xib. –

+0

Istnieje odpowiedź z pewnym kodem na powiązany wpis. @Stunner stackoverflow.com/a/18976660/235206 ma rozwiązanie – MiKL

0

Wystarczy raz trzeba sprawdzić swoją główną rozmiaru UIView dla iOS 7.0 & później & iOS 6.0 & niższe, prawdopodobnie dostaniesz pomysł.

Z iOS 7 Apple zmienił główny widok size = poprawiony Oznacza to, że jeśli dodasz pasek nawigacyjny, tabbar Twój rozmiar widoku pozostanie taki sam [iPhone 4s: 320 * 480, iPhone 5: 320 * 568].

8

Jeśli chcesz wyświetlić pasek stanu pod iOS   7 z Xcode 5, przestawiaj ponownie przyciski i inne widoki, aby zrobić wystarczająco dużo miejsca wokół paska stanu. Ale, po prostu poczekaj! Lubię też iOS   6. Jak mogę to zrobić?

Znalazłem documentation from Apple i odnalazłem tytuł "Wspieranie dwóch wersji aplikacji standardowej" w dokumencie.

Jeśli edytujesz numer XIB file, wybierz go i kliknij edytor asystenta. Będziesz mógł znaleźć tam menu "ręczne, automatyczne ...". Następnie wybierz "podgląd".

Enter image description here

Wtedy przekonasz bok Widok układu siebie. Wtedy zauważysz, że w prawym dolnym rogu prawego panelu (widok) znajduje się przycisk popup; jest napisane "iOS   7 i później". Możesz wybrać "iOS   6.1 i wcześniejsze". Woa! Teraz można dokonać korekty dla iOS   6.1 bez wpływu na układ iOS   7.

Enter image description here

Jeśli pracujesz w serii ujęć, to jest w zasadzie taki sam.Wybierz obiekt kontrolera widoku i kliknij w tryb edytora asystenta, wybierz "podgląd", a następnie "iOS7 i później" ... Bluh Bluh Bluh.

Nie jestem pewien, ale tylko asystent edytora może przejść na tryb iOS   7 +/iOS  . Właśnie znalazłem to bardzo niedawno, więc proszę zwrócić uwagę, jeśli są jakieś nieporozumienia lub inne sztuczki.

+3

"Teraz możesz dokonać regulacji dla iOS 6.1 bez wpływu na układ iOS 7". Nie sądzę, że to prawda. To tylko narzędzie do podglądu. –

+0

Opcja "iOS 7 i nowsze" można również znaleźć w "Inspektorze plików" kontrolera widoku do scenorysu – RootCode

Powiązane problemy