我正在尝试为 iPad 和 iPhone (4'') 设置不同的约束。
我为 iPhone 设置了常规高度和紧凑宽度限制。但这些限制显示在 7.9 英寸 iPad、9.7 英寸 iPad 上。
这些约束用于模态视图。
如何使我的常规高度和紧凑宽度限制仅限于我的 iPhone。
我正在尝试为 iPad 和 iPhone (4'') 设置不同的约束。
我为 iPhone 设置了常规高度和紧凑宽度限制。但这些限制显示在 7.9 英寸 iPad、9.7 英寸 iPad 上。
这些约束用于模态视图。
如何使我的常规高度和紧凑宽度限制仅限于我的 iPhone。
因为 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
}
}
作为说明,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;
}