【发布时间】:2016-11-17 19:47:32
【问题描述】:
我正在尝试为 iPad 和 iPhone (4'') 设置不同的约束。
我为 iPhone 设置了常规高度和紧凑宽度限制。但这些限制在 7.9 英寸 iPad、9.7 英寸 iPad 上显示。
这些约束适用于模态视图。
如何使我的常规高度和紧凑宽度限制仅限于我的 iPhone。
【问题讨论】:
标签: iphone ipad modalviewcontroller size-classes adaptive-layout
我正在尝试为 iPad 和 iPhone (4'') 设置不同的约束。
我为 iPhone 设置了常规高度和紧凑宽度限制。但这些限制在 7.9 英寸 iPad、9.7 英寸 iPad 上显示。
这些约束适用于模态视图。
如何使我的常规高度和紧凑宽度限制仅限于我的 iPhone。
【问题讨论】:
标签: iphone ipad modalviewcontroller size-classes adaptive-layout
请注意,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;
}
【讨论】:
由于 iPad 上的表单呈现是紧凑的宽度和常规的高度,它正在接受这些限制。
Formsheet ios 8 constraints are same as iphones constraints
解决方案是在 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
}
}
【讨论】: