6

У меня есть UINavigationController с корнем UIViewController («root»).iOS8 - После нажатия UIViewController на UINavigationController и вращения устройства размер неправильный в предыдущем контроллере представления

Контроллер корневого представления выдвигает другой UIViewController «ребенок». Когда на экране отображается «ребенок» UIViewController, я поворачиваю устройство и ожидаю, что «корневой» контроллер просмотра будет соответствующим образом изменен, но этого не произойдет. После ввода контрольной точки в контроллере представления корня:

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

Я вижу, что размер неправильно и контроллер представления корня делает правильно не приспосабливается к изменению.

Испытывал ли кто-нибудь такое поведение?

Код выглядит так:

@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

Вот экран печати из NSLog размера после поворота устройства - Это из тренажера, но поведение такое же на Устройство.

enter image description here

+0

Каков ваш размер журнала, что вы ожидаете? – gabbler

+0

Я добавлю экран печати - после того, как несколько раз повернул устройство. Обратите внимание, что размер всегда один и тот же. –

+0

Да, он всегда одного и того же размера, похоже, что root View не вращается вообще. – gabbler

ответ

0

Возможно, что только окно поворота. Если вы печатаете его так, это всегда правильно, как я протестировал.

[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

Это взломать. Я не хочу ставить это на 20 контроллеров представления. –

+0

Все, что есть, выгружает текущий журнал в журнал. В этом коде ничего не сделано. –

+0

@NormanH, этот код работает для меня, он помещается в предыдущий контроллер представления, представление которого выключено, если вы поворачиваете текущее представление, журналы правильные. – gabbler

2

Такая же проблема на моем проекте. кажется, что UINavigationController и UITabBarController (возможно, все ViewController?) Дать там детям неправильного размера, когда вы звоните по телефону:

«[супер viewWillTransitionToSize: размер withTransitionCoordinator: координатор];»

Я исправил проблему, переопределив 'viewWillTransitionToSize: withTransitionCoordinator:' в моем подклассе контроллера tabBarController и панели навигации (тот же код в обоих).

- (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]; 
    } 
} 

Я не уверен, что это лучший способ, если вы нашли что-то лучшее, скажите, пожалуйста.