模态视图上的大小类

时间:2016-07-14 18:43:14

标签: iphone ipad modalviewcontroller size-classes adaptive-layout

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

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

这些约束适用于模态视图。

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

2 个答案:

答案 0 :(得分:4)

因为iPad上的表格表格是紧凑的宽度和规则的高度,所以它正在受到这些限制。

Formsheet ios 8 constraints are same as iphones constraints

解决方案是覆盖Preased视图控制器中的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
    }
}

答案 1 :(得分:0)

请注意,iOS文档对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;
}