2016-06-21 6 views
1

私のアプリでUISplitViewControllerを使用しています。これは、プライマリとセカンダリが常に見えるところでiPad上でうまく動作し、UINavigationControllerのように動作するほとんどのiPhoneでうまく動作します。UISplitViewController - iPhone 6のランドスケープでの分割を防止する

iPhone 6+および6S +では、スプリットビューはiPhoneのようにポートレートで動作し、iPadはランドスケープで動作します。このような景観の分割は私に問題を引き起こしています。私はそれを避けたいのです。

UISplitViewControllerがiPhone 6+ランドスケープにプライマリコントローラとセカンダリコントローラを表示しないようにする方法はありますか?他のiPhoneと同じようにセカンダリコントローラを表示したいだけです。

ありがとうございました。

答えて

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]) 
    } 
} 
関連する問題