6

Mam UINavigationController z root UIViewController ("root").iOS8 - Po naciśnięciu UIViewController na UINavigationController i obracanie urządzenia, rozmiar jest nieprawidłowy w poprzednim kontroler widoku

Główny kontroler widoku przesuwa kolejny "potomek" UIViewController. Kiedy na ekranie pojawia się "dziecko" UIViewController, obracam urządzenie i oczekuję, że kontroler widoku "root" zmieni odpowiednio rozmiar, ale tak się nie dzieje. Po oddaniu do przerwania w kontrolerze widoku root:

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 

widzę, że rozmiar jest źle, a kontroler widoku głównego nie dostosować odpowiednio do zmian.

Czy ktoś doświadczył tego zachowania?

Kod jest jak tak:

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 


} 

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
/// The size is wrong if this view controller is off screen 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 
- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

enter image description here

Oto print screen z NSLog wielkości po obróceniu urządzenia - jest to z symulatora ale zachowanie jest taka sama urządzenie.

enter image description here

+0

Jaki jest twój log wielkości, czego się spodziewasz? – gabbler

+0

Dodam ekran do wydruku - po kilkukrotnym obróceniu urządzenia. Zauważ, że rozmiar jest zawsze taki sam. –

+0

Tak, zawsze ma ten sam rozmiar, wygląda na to, że kontroler widoku głównego nie obraca się wcale. – gabbler

Odpowiedz

0

Możliwe, że tylko okno obrócić. Jeśli wydrukujesz go w ten sposób, zawsze jest to poprawne, tak jak przetestowałem.

[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) 
{ 

} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) 
{ 
    UIWindow *screen = [[[UIApplication sharedApplication] delegate] window]; 
    CGSize mainWindowSize = screen.bounds.size; 
    NSLog(@"Main window size is %@",NSStringFromCGSize(mainWindowSize)); 

}]; 
+0

To jest hack. Nie chcę tego umieszczać w 20 kontrolerach widoku. –

+0

Wszystko, co jest, to wyrzucenie bieżącego rozmiaru do dziennika. Nic jeszcze nie wpłynęło na ten kod. –

+0

@NormanH, ten kod działa dla mnie, jest umieszczony w poprzednim kontrole widoku, który widok jest poza ekranem, jeśli obrócisz bieżący widok, dzienniki są prawidłowe. – gabbler

2

Ten sam numer w moim projekcie. Wydaje się, że UINavigationController i UITabBarController (może wszystko viewController?) Dać tam dzieci w złym rozmiarze, kiedy rozmowy:

'[Super viewWillTransitionToSize: wielkość withTransitionCoordinator: koordynator];'

Naprawiłem problem przez przesłonięcie "viewWillTransitionToSize: withTransitionCoordinator:" w mojej podklasie tabBarController i kontrolera paska nawigacyjnego (ten sam kod w obu).

- (void)viewWillTransitionToSize:(CGSize)size 
     withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    for (UIViewController* aViewController in self.viewControllers) 
    { 
     [aViewController viewWillTransitionToSize:size 
         withTransitionCoordinator:coordinator]; 
    } 

    if ([self presentedViewController]) 
    { 
     [[self presentedViewController] viewWillTransitionToSize:size 
             withTransitionCoordinator:coordinator]; 
    } 
} 

Nie jestem pewien, czy to najlepszy sposób, jeśli znalazłeś coś lepszego, powiedz mi, proszę.

Powiązane problemy