2014-02-14 6 views
0

전체 화면으로 표시되는보기가 있습니다. 제시된 전체 화면보기를 세로 방향으로 제한하고 싶습니다.세로 방향

누구나 하나의보기를 세로로 제한하는 것을 도와 줄 수 있습니까? 가로로 넘어서면 안됩니다.

아이폰 OS 6 +

당신이 찾고있는 것을 않는 supportedInterfaceOrientations라는 방법있다 : 다음에 따라 넣어

- (NSUInteger)supportedInterfaceOrientations 
{ 
    //If you want to support landscape 
    return UIInterfaceOrientationMaskAll; 

    //If you don't 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (BOOL)shouldAutorotate { 
    return YES; 
} 

+0

별도의보기 컨트롤러입니까, 아니면 UIView입니까? – David

+0

별도의 viewController. Alltogether 두 viewControllers.For 두 번째 내가 세로로 제한하고 싶습니다. – user3202087

+0

참조 : http : // stackoverflow.com/questions/18595561/대안 -ios-layouts-for-portrait-and-landscape-using-one-xib-file –

답변

2

당신이 사용하는 코드는 아이폰 OS 타겟팅하는에 따라 달라집니다 return 문을 각보기 컨트롤러에서 사용하십시오.


은에서 iOS 5 및 이전 :

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return !(UIInterfaceOrientationIsLandscape(toInterfaceOrientation)); 
} 
+0

예. 시뮬레이터에서 작동했습니다. 감사합니다. iPad 및 확인 및 피드백을 제공합니다. – user3202087

+0

안녕하세요 그것은 많은 viewControllers 거기에있는 내 주 응용 프로그램에서 작동하지 않습니다. 그리고 거기에 초상화로 제한 싶었지만 위의 코드를 추가하지만 작동하지 않습니다. 그것의 보여주는풍경도. 네가 가진 다른 방법? – user3202087

+0

당신이 쓰고있는 iOS 버전은 무엇입니까? – David

1

당신이 벤처 투자자 사이에서 제시하는 모델을 사용하는 경우, @ 데이비드의 대답은 올바른 것입니다. 푸시/팝 UINavigationController을 사용하는 경우 작업이 더욱 복잡해집니다.

- (NSUInteger)supportedInterfaceOrientations- (BOOL)shouldAutorotate은 장치 회전 또는 루트 컨트롤러가 변경된 후에 만 ​​호출 할 수 있습니다. 푸시/팝으로는 만들 수 없습니다. 이

[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationPortrait]; 

그러나이 사용되지 않습니다 :


iOS5를에서 이전은,하는 API가있다. Apple은 그것을 개인적인 것으로 만듭니다.

objc_msgSend([UIDevice currentDevice], @selector(setOrientation:), @(UIInterfaceOrientationPortrait)); 

또는

[[UIDevice currentDevice] setValue:@(UIInterfaceOrientationPortrait) 
          forKey:@"orientation"]; 

참고 :

당신은 여전히 ​​같은 6 + 아이폰 OS에 전화를 objc 런타임 API를 사용할 수 있습니다 비공개 API이다, 이것은에 의해 거부 될 수 있습니다 App Store. 이것은 - (NSUInteger)supportedInterfaceOrientations- (BOOL)shouldAutorotate 호출 할 수 있도록합니다

[self presentViewController:[UIViewController new] 
       animated:NO 
       completion:^{ 
        [self dismissViewControllerAnimated:NO completion:nil]; 
       }]; 

:


또 다른 교묘 한 방법

, 그냥 다음 빈 VC를 제시 viewDidAppear에 같은 그것을 기각한다는 것입니다.


위의 내용에 만족하지 않는 경우 나만의 NavigationController를 만들거나 이 질문을 확인하십시오 : Why can't I force landscape orientation when use UINavigationController?.

+0

고맙습니다. 잘 작동합니다. 그러나보기가 열리면 세로가되지만 한 번 왼쪽으로 4 번 회전하면 가로로 들어간 네 번째 시간에 한 가지 문제가 있습니다. : – user3202087

+0

@ user3202087 왜 지금 당신의 설명과 함께, 어쩌면 당신은 새로운 질문을하고 코드를 게시 할 수 있습니다 알아낼 수 없었다. – lancy

+0

사실, 내가 navigationController 푸시/팝 그래서 데이빗의 코드가 작동하지 않았고 당신의 코드 (위에서 언급 한) 문제가 있었지만 pushController를 표시하도록 푸시/팝을 변경했습니다. 어쨌든 고맙습니다. 도움을 주셔서 감사합니다. :) – user3202087

관련 문제