如何通过xcode对边距约束应用乘数?

Posted

技术标签:

【中文标题】如何通过xcode对边距约束应用乘数?【英文标题】:How to apply multiplier on margin constraint through xcodee? 【发布时间】:2019-06-23 18:48:36 【问题描述】:

约束

布局层次

橙色卡片上边距

说明

我希望橙色框的一半(滚动视图内)始终位于green color 图像的顶部。所以我在top constraintorange box 上应用了乘数属性

考虑iPhone 4

460/123 = 滚动视图高度 (460) / (167 - 44)(橙色框高度 - iphone 4 中框的上边距)

我想在橙色框的上边距为其超级视图(即scrollView)提供乘数,以便在不同屏幕中以相同的比例动态调整。

我所取得的成就是:

我在这里做错了什么以及如何通过 xcode 处理布局?

它不是动态的。我怎样才能实现这种布局?或者如何通过xcode在垂直约束上添加乘数?

【问题讨论】:

你的绿色视图不尊重安全区域,你应该决定橙色视图是否也应该发生这种情况 【参考方案1】:

NSLayoutConstraintmultiplier 是一个只能获取 属性。因此,每次您想要使用不同的乘数时都必须创建一个新实例并停用旧约束,然后如果要调整乘数则激活新约束。

我建议改为调整约束的constant,这样你就不需要创建新的约束实例了。

@IBOutlet weak var topMarginConstraint: NSLayoutConstraint!

override public func viewDidLoad() 
    if iphone4 
        topMarginConstraint.constant = scrollView.frame.height / (orangeBoxView.height - iphone4TopMargin)
     else if iphonex 
        topMarginConstraint.constant = scrollView.frame.height / (orangeBoxView.height - iphonexTopMargin)
     else 
        // Implementations for other phones / screens...
    
    view.setNeedsLayout()

【讨论】:

你确定除了给所有设备高度之外别无他法吗?自动布局不能根据百分比来处理约束的大小?

以上是关于如何通过xcode对边距约束应用乘数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将乘数应用于在 nib 文件上创建的所有约束?

Xcode7 - 等高乘数约束导致冲突约束

如何在 Xcode 的嵌入式堆栈视图中设置边距而不会出现约束错误?

iOS - 通过 Swift 更改约束乘数 [重复]

在Xcode 9上,约束到边距不能正常工作

对边距的影响?