1

我正在尝试为 iPad 和 iPhone (4'') 设置不同的约束。

我为 iPhone 设置了常规高度和紧凑宽度限制。但这些限制显示在 7.9 英寸 iPad、9.7 英寸 iPad 上。

这些约束用于模态视图。

如何使我的常规高度和紧凑宽度限制仅限于我的 iPhone。

4

2 回答 2

7

因为 iPad 上的表单呈现是紧凑的宽度和规则的高度,它正在接受这些限制。

Formsheet ios 8 约束与 iphone 约束相同

解决方案是在 Presented 视图控制器中覆盖 traitCollection

override var traitCollection: UITraitCollection
{
    if UIDevice.isIPad()
    {
        let traits = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Regular)
        let traits2 = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Regular)
        let traitCollection = UITraitCollection(traitsFromCollections: [traits, traits2])

        return traitCollection
    }
    else
    {
        return super.traitCollection
    }
}
于 2016-07-14T19:45:33.437 回答
3

作为说明,iOS Docs 有以下警告traitCollection

直接使用 traitCollection 属性。不要覆盖它。不要提供自定义实现。

众所周知,这里有一个 Obj-C 解决方案,它结合了super带有更新的水平/垂直特征的特征:

- (UITraitCollection *)traitCollection {
    UITraitCollection *traitCollection = [super traitCollection];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        UITraitCollection *horizontalTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
        UITraitCollection *verticalTraitCollection = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
        traitCollection = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection, horizontalTraitCollection, verticalTraitCollection]];
    }
    return traitCollection;
}
于 2018-07-11T18:35:16.173 回答