适用于iPad纵向和横向模式的尺寸等级

适用于iPad纵向和横向模式的尺寸等级

我基本上希望根据iPad(纵向或横向)的方向使用xcode 6中引入的大小调整类来定位不同的子视图。我已经找到了许多教程,解释了IB在纵向和横向上如何为Iphone提供不同的大小调整类。但是,似乎没有任何内容涵盖IB上的iPad的个人风景或肖像模式。有人可以帮忙吗?



繁星coding
浏览 787回答 3
3回答

慕盖茨4494581

作为RonDiamond的长篇答案的摘要。您需要做的就是在根视图控制器中。Objective-C的-&nbsp;(UITraitCollection&nbsp;*)overrideTraitCollectionForChildViewController:(UIViewController&nbsp;*)childViewController{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(CGRectGetWidth(self.view.bounds)&nbsp;<&nbsp;CGRectGetHeight(self.view.bounds))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[UITraitCollection&nbsp;traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[UITraitCollection&nbsp;traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular]; &nbsp;&nbsp;&nbsp;&nbsp;}}迅速:override&nbsp;func&nbsp;overrideTraitCollectionForChildViewController(childViewController:&nbsp;UIViewController)&nbsp;->&nbsp;UITraitCollection!&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;view.bounds.width&nbsp;<&nbsp;view.bounds.height&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;UITraitCollection(horizontalSizeClass:&nbsp;.Compact) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;UITraitCollection(horizontalSizeClass:&nbsp;.Regular) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}然后在storyborad中使用紧凑宽度为纵向和常规宽度为横向。

蝴蝶不菲

iPad具有水平和垂直尺寸的“常规”尺寸特性,不区分纵向和横向。可以UIViewController通过方法在自定义子类代码中覆盖这些大小特征traitCollection,例如:-&nbsp;(UITraitCollection&nbsp;*)traitCollection&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Distinguish&nbsp;portrait&nbsp;and&nbsp;landscape&nbsp;size&nbsp;traits&nbsp;for&nbsp;iPad,&nbsp;similar&nbsp;to&nbsp;iPhone&nbsp;7&nbsp;Plus. &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Be&nbsp;aware&nbsp;that&nbsp;`traitCollection`&nbsp;documentation&nbsp;advises&nbsp;against&nbsp;overriding&nbsp;it. &nbsp;&nbsp;&nbsp;&nbsp;UITraitCollection&nbsp;*superTraits&nbsp;=&nbsp;[super&nbsp;traitCollection]; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([[UIDevice&nbsp;currentDevice]&nbsp;userInterfaceIdiom]&nbsp;==&nbsp;UIUserInterfaceIdiomPad)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UITraitCollection&nbsp;*horizontalRegular&nbsp;=&nbsp;[UITraitCollection&nbsp;traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UITraitCollection&nbsp;*verticalRegular&nbsp;=&nbsp;[UITraitCollection&nbsp;traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UITraitCollection&nbsp;*regular&nbsp;=&nbsp;[UITraitCollection&nbsp;traitCollectionWithTraitsFromCollections:@[horizontalRegular,&nbsp;verticalRegular]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([superTraits&nbsp;containsTraitsInCollection:regular])&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(UIInterfaceOrientationIsPortrait([[UIApplication&nbsp;sharedApplication]&nbsp;statusBarOrientation]))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;iPad&nbsp;in&nbsp;portrait&nbsp;orientation &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UITraitCollection&nbsp;*horizontalCompact&nbsp;=&nbsp;[UITraitCollection&nbsp;traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[UITraitCollection&nbsp;traitCollectionWithTraitsFromCollections:@[superTraits,&nbsp;horizontalCompact,&nbsp;verticalRegular]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;iPad&nbsp;in&nbsp;landscape&nbsp;orientation &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UITraitCollection&nbsp;*verticalCompact&nbsp;=&nbsp;[UITraitCollection&nbsp;traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassCompact]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[UITraitCollection&nbsp;traitCollectionWithTraitsFromCollections:@[superTraits,&nbsp;horizontalRegular,&nbsp;verticalCompact]]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;superTraits;}-&nbsp;(BOOL)prefersStatusBarHidden&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Override&nbsp;to&nbsp;negate&nbsp;this&nbsp;documented&nbsp;special&nbsp;case,&nbsp;and&nbsp;avoid&nbsp;erratic&nbsp;hiding&nbsp;of&nbsp;status&nbsp;bar&nbsp;in&nbsp;conjunction&nbsp;with&nbsp;`traitCollection`&nbsp;override: &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;For&nbsp;apps&nbsp;linked&nbsp;against&nbsp;iOS&nbsp;8&nbsp;or&nbsp;later,&nbsp;this&nbsp;method&nbsp;returns&nbsp;true&nbsp;if&nbsp;the&nbsp;view&nbsp;controller&nbsp;is&nbsp;in&nbsp;a&nbsp;vertically&nbsp;compact&nbsp;environment. &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NO;}这使iPad具有与iPhone 7 Plus相同的尺寸特性。请注意,其他iPhone型号通常具有“紧凑宽度”特征(而不是常规宽度),无论方向如何。以这种方式模仿iPhone 7 Plus允许该模型在Xcode的Interface Builder中用作iPad的替身,它不知道代码中的自定义。请注意,iPad上的分割视图可能会使用与普通全屏操作不同的大小特征。这个答案是基于这篇博客文章中采用的方法,并做了一些改进。更新以修复iPad版本中的间歇性隐藏状态栏,以及潜在的(更新)特征的践踏UITraitCollection。还注意到Apple文档实际上建议不要覆盖traitCollection,因此将来可能会出现这种技术的问题。
打开App,查看更多内容
随时随地看视频慕课网APP