2016-06-21 9 views
1

내 앱에서 UISplitViewController를 사용하고 있습니다. 이것은 기본 및 보조 어디서나 볼 수있는 iPad에서 잘 작동하며, 그것은 UINavigationController처럼 행동 대부분의 아이폰에 잘 작동합니다.UISplitViewController - iPhone 6에서 가로로 분할하지 않기 plus

iPhone 6+ 및 6S +에서 분할보기는 세로로 iPhone처럼 작동하고 iPad는 가로로 표시됩니다. 이 풍경이 나에게 문제를 일으키고 있으며 나는 그것을 피하고 싶습니다.

UISplitViewController가 iPhone 6+ 랜드 스케이프에서 기본 및 보조 컨트롤러를 표시하지 못하게 할 방법이 있습니까? 난 그냥 보조 컨트롤러, 다른 아이폰에 대한 할 것이라고 같은 표시하고 싶습니다.

감사합니다.

답변

1

UISplitViewController를 서브 클래 싱 한 다음 특성이 장치가 iPad가 아닌 경우 소형 가로 크기 클래스를 반환하도록 재정 의하여이 작업을 수행 할 수있었습니다. 인터페이스 관용구를 확인하는 것은 요즘에는 가짜이지만, 어떻게해야하는지 잘 모르겠습니다.

난 그저 내 UISplitViewController 서브 클래스에이 방법을 추가 : 더 나은 방법을

-(UITraitCollection *)traitCollection { 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     return [super traitCollection]; 
    } else { 
     return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; 
    } 
} 

어떤 제안이 확실히 환영 할 수 있습니다.

+0

이에 대한 신속한 동등한 방법은 무엇입니까? 'overrideTraitCollectionForChildViewController' 만 찾을 수있었습니다 – nravichan

+0

스케치 솔루션처럼 보입니다. UIViewController에 의해 구현 된 UITraitEnvironment 프로토콜에 선언 된 필수 속성을 재정의합니다. 그것은 기본적으로 traitCollection 속성에 대한 "getter"메서드를 재정의합니다. 스위프트에서 어떻게 그런 일을하는지 확신 할 수 없습니다. – TylerJames

+0

나는 그것을 무시하려고 노력하고 작동하지 않았다. – nravichan

0

여기에 세로 크기 클래스는 풍경에 전화를 잘못입니다 수정 스위프트에서뿐만 아니라와 같은 대답은 다음과 같습니다

override var traitCollection: UITraitCollection { 
    if UI_USER_INTERFACE_IDIOM() == .pad { 
      return super.traitCollection 
    } else { 
     let horizontal = UITraitCollection(horizontalSizeClass: .compact) 
     let vertical = UITraitCollection(verticalSizeClass: super.traitCollection.verticalSizeClass) 
     return UITraitCollection.init(traitsFrom: [horizontal, vertical]) 
    } 
}