Ios 用大小分类区分iPad的方向

Ios 用大小分类区分iPad的方向,ios,ipad,layout,ios8,size-classes,Ios,Ipad,Layout,Ios8,Size Classes,在iOS 8中,苹果引入了用于处理应用程序布局的大小类。开发人员不必根据设备、屏幕大小和方向来设计用户界面,而应该根据活动大小类来调整应用程序的布局。我认为这是一个好的举动 然而,在我看来,当谈到iPad时,似乎没有办法区分不同的设备方向,它们提供了完全不同的屏幕空间和操作方式。从: 如果我只想横向显示侧菜单,因为它提供了更多的空间,比如UISplitViewController,我现在应该怎么做 UISplitViewController是苹果不吃自己的狗粮,而是使用其他一些指标(如设备方向或

在iOS 8中,苹果引入了用于处理应用程序布局的大小类。开发人员不必根据设备、屏幕大小和方向来设计用户界面,而应该根据活动大小类来调整应用程序的布局。我认为这是一个好的举动

然而,在我看来,当谈到iPad时,似乎没有办法区分不同的设备方向,它们提供了完全不同的屏幕空间和操作方式。从: 如果我只想横向显示侧菜单,因为它提供了更多的空间,比如UISplitViewController,我现在应该怎么做

UISplitViewController是苹果不吃自己的狗粮,而是使用其他一些指标(如设备方向或实际屏幕宽度)来确定布局的另一种情况吗?或者有没有其他官方的方法?我可以在界面生成器中单独做一些没有代码的事情吗


不,我不想使用UISplitViewController有几个原因。

我就是这样解决您遇到的问题的:

使用不同的尺寸类添加纵向和横向约束(您似乎正在这样做),然后为基于方向的每个尺寸类的约束创建一个IBOutletCollection

例如,我使用wAnyhRegular设置我的纵向iPad布局,然后使用wRegularhAny设置我的横向iPad布局。尽管您可能希望使用wRegular/hRegular作为方向布局之一,因为当您检查UITraitCollection时,iPad注册为wRegular/hRegular。希望下面的代码能够说明我是如何做到这一点的:

@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *iPadPortraitConstraints;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *iPadLandscapeConstraints;
我的肖像限制可以在下面看到。我的风景也有3个限制。

然后,我应用下面未显示的约束,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;
    }
}