6

UINavigationController의 루트가 UIViewController ("root")입니다.iOS8 - UINavigationController에서 UIViewController를 누른 다음 장치를 회전하면 이전보기 컨트롤러에서 크기가 잘못됨

루트보기 컨트롤러가 다른 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

예, 항상 같은 크기입니다. 루트보기 컨트롤러가 전혀 회전하지 않습니다. – 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?)가 잘못된 크기의 자식을 제공하는 것으로 보입니다.

'[super viewWillTransitionToSize : size withTransitionCoordinator : coordinator];'

내 tabBarController 및 탐색 모음 컨트롤러 하위 클래스 (두 코드 모두 동일한 코드)에서 'viewWillTransitionToSize : withTransitionCoordinator :'를 재정 의하여 문제를 해결했습니다.

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

더 나은 방법을 발견 한 경우이 방법이 최선이라고 생각하지 않습니다. 제발 알려주십시오.