2014-01-13 3 views
4

이 답변을 검색했지만 내 문제를 해결 한 항목을 찾을 수 없습니다.supportedInterfaceOrientations가 iOS 7과 함께 호출되지 않았습니다.

여기에 문제가 있습니다. 사용자 정의 UINavigationController가 있습니다. supportedInterfaceOrientations 메서드가 호출되면 rootViewController (세로 만 지원)에서 호출됩니다. 그러나 다른 ViewController를 스택에 푸시 할 때이 메서드는 푸시 된 ViewController에서 호출되지 않습니다 (모두 거꾸로 지원합니다).

저는 을 viewDidLoad-method에서 호출하여 해결했지만 문제를 해결하는 좋은 방법은 아닙니다.

저를 도와 주시면 감사하겠습니다.

다음은 두 번째 viewController에서 구현 한 코드입니다.

- (BOOL)shouldAutorotate { 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     [[[UIApplication sharedApplication] delegate] setGlobalOrientationMask:UIInterfaceOrientationMaskAllButUpsideDown]; 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
    else { 
     [[[UIApplication sharedApplication] delegate] setGlobalOrientationMask:UIInterfaceOrientationMaskAll]; 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

나는 johnMa의 솔루션은 대부분의 응용 프로그램에 대한 잘 작동합니다 생각하지만, 내 경우에는, 내가 생각 특별한 문제가, 그러나 그것은 좋은 일이라면 나는 지금 혼자 (확실하지 그것을 해결하지만, 그것은 작동한다).

내 navigationController-delegate에 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 메서드를 구현했습니다.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if (DEF_SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) { 
     if ([viewController respondsToSelector:@selector(supportedInterfaceOrientations)]) { 
      [viewController supportedInterfaceOrientations]; 
     } 
    } 
} 

나는 이것이 동일한 문제로 다른 사람들을 도울 수 있기를 바랍니다.

답변

13

사용자 지정 NavigationController에서이 코드를 구현해야합니다. 장치가 회전 할 때,이 앱 rootController (사용자 정의있는 navigationController를) 요청 때문에

- (NSUInteger)supportedInterfaceOrientations { 
    if ([self.topViewController isMemberOfClass:[RootViewController class]]){ 
     return UIInterfaceOrientationMaskPortrait; 
    }else{ 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
} 

첫째, supportedInterfaceOrientations 경우가 구현되지 않습니다. rootController에 supportedInterfaceOrientations을 묻습니다.

주 창에서 루트보기 컨트롤러로 작동하거나 주 화면에서 전체 화면으로 표시되는보기 컨트롤러는 지원하는 방향을 선언 할 수 있습니다. " 'supportedInterfaceOrientations'의 구현에 충돌 반환 형식 : 'UIInterfaceOrientationMask'(일명 '열거 View Controller Programming Guide

+1

이 도움이되지만이, 세로에서 가로로 내있는 navigationController에 제 1 회전 통화 supportedInterfaceOrientations를 회전 할 때 지금 발생 한 문제는, 그러나 회전이 수행되지 않으며, 단지 그것을 두 번 회전 할 때 가로 방향으로 회전이 올바르게 수행되었습니다 –

+0

첫 번째/두 번째 시간 문제에 대한 해결책을 찾았습니까? 나는 같은 문제를 겪고있다. –

2

이 내가 경고 된 아이폰 OS 8

에 있지만 아이폰 OS 9 (엑스 코드 7)에서 잘 작동 일의

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
0

스위프트 버전 : NSUInteger '대)'UIInterfaceOrientationMask는) ''(일명 '부호없는 긴 "

은 내가 그것을 변경 전자 선택한 답 :

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    if self.topViewController is ViewController { 
     return .Portrait 
    } else { 
     return .All 
    } 
} 
관련 문제