如何使用自适应大小 类 来确定使用哪个 segue?

How use adaptive size classes to determine which segue to use?

我一直在尝试使用自适应大小 类 而不是在代码中使用 userInterfaceIdiom 来确定要使用哪个 segue(取决于当前设备)。我看到这个提到 here 但不明白该怎么做。

类型设置为表单 Sheet 的 "Present Modally" segue 将在 iPhone 上全屏显示视图控制器,并在 [=] 上使用表单 Sheet 14=]。如果存在导航控制器,"Show" 将推送,但我认为您不能根据大小 类 在推送和模态呈现之间进行选择 - 它们并不是真正等效的操作。

从 Xcode 6.3 开始,我不认为没有代码可以做到这一点。但是,要使用自适应大小 类 而不是用户界面习语,您上面的评论可以这样写:

if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) {
    [self presentViewController:vc animated:YES completion:nil];
} else {
    [vc setPreferredContentSize:CGSizeMake(340, 560)];
    [vc setModalPresentationStyle:UIModalPresentationFormSheet];
    [self presentViewController:vc animated:YES completion:nil];
}

除了 iPhone 6 Plus 横向模式外,这将推动每个 iPhone。

或者,如果您只想在 iPad(而不是 iPhone 6 Plus)上使用模式,您可以这样做:

if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular && self.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular) {
    [vc setPreferredContentSize:CGSizeMake(340, 560)];
    [vc setModalPresentationStyle:UIModalPresentationFormSheet];
    [self presentViewController:vc animated:YES completion:nil];
} else {
    [self presentViewController:vc animated:YES completion:nil];
}