這是我如何解決你所遇到的問題:添加約束
使用不同尺寸的類對於縱向和橫向(您似乎正在這樣做),然後爲基於方向的每個尺寸等級的約束創建一個IBOutletCollection
。
例如,我使用wAnyhRegular來設置我的肖像iPad佈局,然後使用wRegularhAny來設置我的風景iPad佈局。 (雖然你可能想使用wRegular/hRegular爲您的方向佈局之一,因爲iPad上註冊爲wRegular/hRegular當您檢查UITraitCollection
希望下面的代碼演示了我如何去了解它。
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *iPadPortraitConstraints;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *iPadLandscapeConstraints;
我的肖像限制。在下面可以看到我的景觀有3個約束以及 ![Portrait Constraints](https://i.stack.imgur.com/yAby3.png)
我然後應用約束,如下所述(未示出,執行viewDidLoad中_needsiPadConstraintsApplied = YES;
):
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self applyiPadConstraints];
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Size Classes does not support differentiating between iPad Portrait & Landscape.
// Signal that the iPad rotated so we can manually change the constraints.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
_needsiPadConstraintsApplied = YES;
}
}
- (void)applyiPadConstraints {
if (_needsiPadConstraintsApplied) {
if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)) {
[NSLayoutConstraint deactivateConstraints:self.iPadLandscapeConstraints];
[NSLayoutConstraint activateConstraints:self.iPadPortraitConstraints];
} else {
[NSLayoutConstraint deactivateConstraints:self.iPadPortraitConstraints];
[NSLayoutConstraint activateConstraints:self.iPadLandscapeConstraints];
}
_needsiPadConstraintsApplied = NO;
}
}