2016-06-21 34 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

看起來像一個粗略的解決方案。它覆蓋UITraitEnvironment協議中聲明的必需屬性,該屬性由UIViewController實現。它基本上覆蓋了traitCollection屬性的「getter」方法。不知道你如何在Swift中做這樣的事情。 – 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]) 
    } 
}