3 回答

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
作為RonDiamond的長(zhǎng)篇答案的摘要。您需要做的就是在根視圖控制器中。
Objective-C的
- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController{ if (CGRectGetWidth(self.view.bounds) < CGRectGetHeight(self.view.bounds)) { return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; } else { return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular]; }}
迅速:
override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection! { if view.bounds.width < view.bounds.height { return UITraitCollection(horizontalSizeClass: .Compact) } else { return UITraitCollection(horizontalSizeClass: .Regular) } }
然后在storyborad中使用緊湊寬度為縱向和常規(guī)寬度為橫向。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
iPad具有水平和垂直尺寸的“常規(guī)”尺寸特性,不區(qū)分縱向和橫向。
可以UIViewController
通過(guò)方法在自定義子類(lèi)代碼中覆蓋這些大小特征traitCollection
,例如:
- (UITraitCollection *)traitCollection { // Distinguish portrait and landscape size traits for iPad, similar to iPhone 7 Plus. // Be aware that `traitCollection` documentation advises against overriding it. UITraitCollection *superTraits = [super traitCollection]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { UITraitCollection *horizontalRegular = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular]; UITraitCollection *verticalRegular = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular]; UITraitCollection *regular = [UITraitCollection traitCollectionWithTraitsFromCollections:@[horizontalRegular, verticalRegular]]; if ([superTraits containsTraitsInCollection:regular]) { if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])) { // iPad in portrait orientation UITraitCollection *horizontalCompact = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; return [UITraitCollection traitCollectionWithTraitsFromCollections:@[superTraits, horizontalCompact, verticalRegular]]; } else { // iPad in landscape orientation UITraitCollection *verticalCompact = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassCompact]; return [UITraitCollection traitCollectionWithTraitsFromCollections:@[superTraits, horizontalRegular, verticalCompact]]; } } } return superTraits;}- (BOOL)prefersStatusBarHidden { // Override to negate this documented special case, and avoid erratic hiding of status bar in conjunction with `traitCollection` override: // For apps linked against iOS 8 or later, this method returns true if the view controller is in a vertically compact environment. return NO;}
這使iPad具有與iPhone 7 Plus相同的尺寸特性。請(qǐng)注意,其他iPhone型號(hào)通常具有“緊湊寬度”特征(而不是常規(guī)寬度),無(wú)論方向如何。
以這種方式模仿iPhone 7 Plus允許該模型在Xcode的Interface Builder中用作iPad的替身,它不知道代碼中的自定義。
請(qǐng)注意,iPad上的分割視圖可能會(huì)使用與普通全屏操作不同的大小特征。
這個(gè)答案是基于這篇博客文章中采用的方法,并做了一些改進(jìn)。
更新以修復(fù)iPad版本中的間歇性隱藏狀態(tài)欄,以及潛在的(更新)特征的踐踏UITraitCollection
。還注意到Apple文檔實(shí)際上建議不要覆蓋traitCollection
,因此將來(lái)可能會(huì)出現(xiàn)這種技術(shù)的問(wèn)題。
- 3 回答
- 0 關(guān)注
- 892 瀏覽
添加回答
舉報(bào)