IWszystko działa dobrze przed iOS 6. Mam podklasę UIViewController w UINavigationController jak zwykle. Jego widok zmniejsza się o około 20 pikseli, tak jakby na górze znajdował się kolejny pasek stanu. Kiedy naciskam i otwieram widok z powrotem. Widok wrócił do swojej prawidłowej pozycji. Dowiedziałem się, że dzieje się tak, ponieważ ramka UIViewControllerWrapperView (uzyskana przez użycie self.view.superview) w jakiś sposób pomyliła się w iOS 6.

Robię NSLog w viewDidAppear

Po uruchomieniu aplikacji...

self.view.frame: {{0, 0}, {768, 891}} // was {{0, 0}, {768, 911}} in iOS5.1
self.view.superview: <UIViewControllerWrapperView: 0x9dddb80; frame = (0 20; 768 891); autoresize = W+H; layer = <CALayer: 0x9dddc30>> 
// was (0 0; 768 911); in iOS5.1

Po naciśnięciu i pop-view kontroler (prawidłowa wartość) ...

self.view.frame: {{0, 0}, {768, 911}}
self.view.superview: <UIViewControllerWrapperView: 0x9dddb80; frame = (0 0; 768 911); autoresize = W+H; layer = <CALayer: 0x9dddc30>>

To się nigdy wcześniej nie zdarzało. Jak to wygląda w iOS 6?

4
Hlung 26 wrzesień 2012, 14:02

2 odpowiedzi

Najlepsza odpowiedź

Oto moja obecna brudna poprawka w viewDidAppear.

// fix wrong UIViewControllerWrapperView frame by moving up and extending it back
CGRect wvFrame = self.view.superview.frame;
if (wvFrame.origin.y > 0) {
    wvFrame.size.height += wvFrame.origin.y;
    wvFrame.origin.y = 0;
    self.view.superview.frame = wvFrame;
}
2
Hlung 26 wrzesień 2012, 15:34

Jest lepsze rozwiązanie niż akceptowane. Spróbuj ustawić wantFullScreenLayout na TAK w viewDidLoad.

self.wantsFullScreenLayout = YES;
1
Oleksandr Cheboraka 26 wrzesień 2014, 18:07