如何设置Autolayout约束常量通用或特定于设备?

时间:2016-12-20 11:25:05

标签: ios objective-c swift autolayout

我在其中一个UI控件上实现了约束IBOutlet,并且我在运行时更改了这些约束的constant属性的值,以便我可以设置该控件的动画。根据需要改变框架。

但是我遇到这个问题:当我更改常量时,它在iPhone 5s上完美运行,但是当我使用iPhone 6运行相同的代码时,常常需要更大的数值。我将如何使它成为通用的常量将采用动态大小?

以下是我的实施:

 func scrollViewDidScroll(scrollView: UIScrollView) {
    let scrollViewHeight = Float(scrollView.frame.size.height)
    let scrollContentSizeHeight = Float(scrollView.contentSize.height)
    let scrollOffset = Float(scrollView.contentOffset.y)

    if (scrollOffset == 0) {            
        self.mapUpConstraints.constant = 30
        UIView.animateWithDuration(0.8) {
          self.view.layoutSubviews()
        }
    }
    else if (scrollOffset + scrollViewHeight <= scrollContentSizeHeight) {
        self.mapUpConstraints.constant = -160
        UIView.animateWithDuration(1.0) {
            self.view.layoutSubviews()
        }
    }
}

1 个答案:

答案 0 :(得分:2)

一种方法是根据屏幕尺寸设置常数。

假设您知道iPhone 5屏幕的常数为30,您可以计算iPhone 6所需的常量

self.view.bounds.height / (568 / 30)

其中self.viewUIViewController的视图。

另一种方法是更改​​约束multiplier属性。使用这种方法,您需要找出所有屏幕尺寸上UI组件之间的通用关系。

您需要选择更适合您和UI的内容。