如何在autolayout中使两个视图之间的距离变化

时间:2017-02-25 15:14:03

标签: ios autolayout aspect-ratio ios-autolayout

我有一个距离顶部布局50 px的视图。

我希望距离根据设备大小而变化,例如它应该在4秒内变为30像素,而在iPhone 6s中应该变为50像素,而iPhone 6s则为60像素。

我尝试提供宽高比而不是垂直间距,但它不起作用。

如果我只是在所有设备中给出50px的垂直间距..请帮助我

2 个答案:

答案 0 :(得分:2)

AutoLayout确实允许您根据屏幕设置不同的约束,但它仅限于方向更改,以及iPad和iPhone。你必须以编程方式完成它。

This link将向您展示如何获取设备,然后一旦您拥有该设备,您需要为您的约束创建一个@IBOutlet,然后您可以将其.constant属性更改为40 ,50或60

public extension UIDevice {

    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        switch identifier {
        case "iPhone4,1":                               return "iPhone 4s"
        case "iPhone8,1":                               return "iPhone 6s"
        case "iPhone8,4":                               return "iPhone SE"
        default:                                        return identifier
        }
    }

}

现在您可以这样使用它:

@IBOutlet weak var myConstraint: NSLayoutConstraint!

override func viewDidLoad() {
    super.viewDidLoad()
    if UIDevice.current.modelName == "iPhone 4s" {
        myConstraint.constant = 30
    }
    else if UIDevice.current.modelName == "iPhone SE" {
        myConstraint.constant = 50
    }
    else if UIDevice.current.modelName == "iPhone 6s" {
        myConstraint.constant = 60
    }
}

答案 1 :(得分:1)