如何设置自动布局约束常量通用或设备特定?

Posted

技术标签:

【中文标题】如何设置自动布局约束常量通用或设备特定?【英文标题】:How to set Autolayout constraints constant generic or device specific? 【发布时间】:2016-12-20 11:25:04 【问题描述】:

我在其中一个 UI 控件上实现了约束 IBOutlets,并在运行时更改了这些约束的 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】:

一种方法是根据屏幕大小设置常量。

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

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

其中self.view 是您的UIViewController 的视图。

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

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

【讨论】:

以上是关于如何设置自动布局约束常量通用或设备特定?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确设置水平图像视图的自动布局约束?

Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )

Android 屏幕适配屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )

如何在所有 iOS 设备上设置自动布局?

如何在imageView上设置自动布局约束以获得良好的分辨率图像?

如何仅使用一个情节提要为所有 iPhone 设备设计自动布局约束?