IOS9 以编程方式限制 iphone 和 ipad
Posted
技术标签:
【中文标题】IOS9 以编程方式限制 iphone 和 ipad【英文标题】:IOS9 programmatically constraints for iphone and ipad 【发布时间】:2017-02-09 16:13:02 【问题描述】:在视图控制器中,我以编程方式创建了 uitextfield。对于此文本字段,我希望有以下限制:距顶部 90 像素,高度 50 像素,iphone 设备的左右两侧各 8 像素(因此调整宽度)和 ipad 设备的 400 像素固定宽度。
这是我的代码中指定这些约束的部分:
text.topAnchor.constraint(equalTo: view.topAnchor, constant: 90).isActive = true
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8).isActive = true
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8).isActive = true
text.heightAnchor.constraint(equalToConstant: 50).isActive = true
此代码为 iphone 设备提供了正确的结果,但是对于 ipad 设备,这不是我想要的(调整了文本字段的宽度)。我了解该代码块不适用于 ipad。
我的问题是如何以编程方式为 iphone 和 ipad 设备设置上述逻辑的约束?
我认为可能的解决方案可能是在设置约束之前检查屏幕尺寸宽度,但我不知道它是否适合此任务。
【问题讨论】:
【参考方案1】:为了完成@matt 的精彩回答,这里有一个示例,说明如何检查设备是 iPad 还是 iPhone。
enum UIUserInterfaceIdiom : Int
case unspecified
case phone // iPhone
case pad // iPad
然后你可以像这样使用它:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
或者,如果您更喜欢使用 Switch:
switch UIDevice.current.userInterfaceIdiom
case .phone:
// It's an iPhone
case .pad:
// It's an iPad
case .unspecified:
// Error handling
对于您的情况,您可以简单地使用 if/else 语句。
您只需检查如果设备是 iPad 还是 iPhone,然后相应地设置您的约束条件。
【讨论】:
【参考方案2】:iphone 设备左右两侧各 8 像素(因此宽度会调整),ipad 设备则为 400 像素固定宽度
首先,让我们注意,对于 iPad,您的约束没有充分指定,因为您没有说视图的 x 原点应该在 iPad 上的什么位置。因此,出于讨论的目的,我必须编造一些东西:我会说您希望视图水平居中。
因此,在规定了这一点后,您所要做的就是查看traitCollection
并检查其userInterfaceIdiom
。这告诉您我们使用的是 iPad 还是 iPhone(.pad
或 .phone
),一个简单的 if
/else
构造将允许您提供适当的一组约束。
所以,不用我实际为您编写约束条件,您将使用以下结构:
text.topAnchor.constraint(equalTo: view.topAnchor, constant: 90).isActive = true
text.heightAnchor.constraint(equalToConstant: 50).isActive = true
let dev = self.traitCollection.userInterfaceIdiom
if dev == .phone
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8).isActive = true
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8).isActive = true
else
text.widthAnchor.constraint...
text.centerXAnchor.constraint...
【讨论】:
【参考方案3】:使用 leftAnchor 和 rightAnchor 代替前导/尾随可能在设备间更友好,尽管 Apple 建议尽可能使用前导尾随。
【讨论】:
以上是关于IOS9 以编程方式限制 iphone 和 ipad的主要内容,如果未能解决你的问题,请参考以下文章