基于 ipad 或 iphone 更改对象的约束

changing constraints of object based on ipad or iphone

在我的代码中,为了达到预期的效果,我只能根据使用 iphone 或 ipad 来更改约束。所以我需要创建类似 if iphone constraints = and then if ipad constraints 的东西。我写了一个我需要做的例子。我只需要更改控制底部 ancor 的 4 个语句的最后一行。

     //ipad
     NSLayoutConstraint.activate([
        
        box.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.25),
        box.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier: 0.10),
        box.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        box.centerYAnchor.constraint(equalTo: view.centerYAnchor),

      ])

 //iphone
     NSLayoutConstraint.activate([
        
        box.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.25),
        box.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier: 0.10),
        box.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        box.bottomAnchor.constraint(equalTo: view.centerYAnchor),

      ])

您可以使用userInterfaceIdiom检测界面风格:

switch UIDevice.current.userInterfaceIdiom {
case .phone: break
// It's an iPhone
case .pad: break
// It's an iPad
default: break
// others
}

检查尺寸 class。对于 ipad,水平和垂直 classes 都应该是规则的。您可以执行以下操作:

    let horizontalSizeClass = view.traitCollection.horizontalSizeClass
    let verticalSizeClass = view.traitCollection.verticalSizeClass

    switch horizantalSizeClass {
    case .regular:
        // Do some layout.
    case .compact:
        // Make compact constraints...
    default:
        // Unspecified. Do something else.
    }
    
    // rest of setup

此外,您无法对其进行任何约束的原因是因为您输入了 break 来结束 switch 语句。其他答案可能有效。