5

가로를 지원하는 viewcontroller (가로 모드 인 경우)에서 가로 방향을 명시 적으로 지원하지 않는 (및 지원하지 않아야하는) 뷰로 이동하려고합니다. 다음과 같이 나는이 일을 해요 : 문제 pushViewController 가로 방향에서 세로

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait); 
} 

가 이상적으로 세로가 아닌 가로에서 처음 시작하는 내가 스택에 밀어있어 새의 ViewController를 원한다. 이상하게도이 방법을 구현하더라도 가로에서 시작합니다.

내 생각에 Apple은 사용자가 가로 방향에서 세로 방향으로 전환하는 것을 원하지 않는다는 것입니다 (가로 방향에서 세로 방향으로 이전 컨트롤러로 돌아가는 것을 허용 함에도 불구하고).

통찰력 및/또는 도움을 많이 주시면 감사하겠습니다.

답변

10

나는 초상화를 강제하는 방법을 발견했습니다. 조금은 해킹이지만, 여기 있습니다. 에서 - 당신이에 대해 다음과 초상화를 강제 할의 ViewController의 (무효)의 viewDidLoad :

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentModalViewController:viewController animated:NO]; 
[self dismissModalViewControllerAnimated:NO]; 
[viewController release]; 

이것은 기본적으로 (만 기본적으로 세로 지원) 컨트롤러를 제공함으로써, 초상화를 강제로.

+0

이것은 portraitView 전용 뷰에서 pushViewController를 통해 가로 뷰 뷰로 이동하는 작업입니다. 문서화되지 않은 비공개 API를 호출하지 않아도됩니다 [[UIDevice currentDevice] setOrientation : UIDeviceOrientationLandscapeRight] 감사합니다! – MyCSharpCorner

+0

좋은 해킹 ... 진짜 편리한 왔어요 ... :) – Roshit

4

새로운보기 컨트롤러를 모달로 표시해야합니다. 네비게이션 컨트롤러 내에 뷰 컨트롤러가 존재하면 네비게이션 스택에있는 모든 뷰 컨트롤러의 방향은 스택에있는 루트 뷰 컨트롤러에 의해 내포됩니다. 네비게이션 스택의 루트 뷰 컨트롤러가 shouldAutoRotateToInterfaceOrientation에서 리턴 한 것은 그 아래의 모든 뷰 컨트롤러에 사용됩니다.

+0

아 내가 본 것, 내가 생각했던 것입니다. 설명 주셔서 감사합니다! – Sahil

1

위의 Sahil의 답변은 iOS 6.0부터 사용되지 않습니다. 그러나, 다음과 같은 트릭을 할 것 :

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentViewController:viewController animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
[viewController release]; 
관련 문제