2014-10-30 2 views
1
-(BOOL)shouldAutorotate { 

    return NO; 

} 

위의 방법은 하나의 컨트롤러에서 작동하지만 스택에 푸시 된 여러 viewController가있는 경우 작동합니다.
세로 모드로만 표시되어야하는 특정 컨트롤러가 필요합니다.특정 컨트롤러에 대해 iOS 8에서 자동 회전을 비활성화하는 방법은 무엇입니까?

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 

} 

위의 방법을 iOS 8 용 스택 오버플로에서 제안했지만 원하는 결과를 얻지 못했습니다.

답변

8

먼저 -shouldAutorotate 대신 -supportedInterfaceOrientations을 사용하십시오. -shouldAutorotate은 런타임에 결정된 요인에 따라 자동 회전을 허용하지 않아야하는 경우에만 사용해야합니다. 보기 컨트롤러가 항상 세로 모드 만 지원한다는 것을 알고 있으므로 여기에 런타임 결정이 없습니다.

다음으로 내비게이션 컨트롤러의 위임자는 -supportedInterfaceOrientations을 호출 한 결과를 내비게이션 스택 맨 위에 반환하기 위해 -navigationControllerSupportedInterfaceOrientations: 메서드를 구현해야합니다.

-(NSUInteger)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController { 
    return navigationController.topViewController.supportedInterfaceOrientations; 
} 

중요한주의 사항 : 탐색 스택에 푸시 된보기 컨트롤러는 초기 인터페이스 방향을 제어하지 않습니다. 이는 항상 현재 인터페이스 방향이됩니다. 위의 기술로 수행 할 작업은 인터페이스가 세로 방향이 아닌 다른 방향으로 회전하는 것을 방지하는 것이며 뷰 컨트롤러가 표시됩니다.

+0

남자, 나는 당신을 용질합니다 .. 당신은 내 문제를 해결했습니다 .... –

+0

이것은 올바른 방법입니다. 하지만 내 경우에는 NavController의 [UIViewController shouldAutorotate]를 재정 의하여 (서브 클래 싱하여) navigationController.topViewController.shouldAutorotate를 반환해야했습니다. – befstrat

+0

또한 topViewController가 null인지 확인하는 것을 잊지 마십시오. – henon