gpt4 book ai didi

ios - 确定具有不同优先级的两个布局约束中的哪一个是确定它们影响的维度/ anchor 的值

转载 作者:搜寻专家 更新时间:2023-11-01 06:28:34 28 4
gpt4 key购买 nike

假设我有两个具有不同优先级的 NSLayoutConstraint,它们都会影响某些 View (middleView) 的高度。

下面,middleView 固定在 topView 的底部,高度为 500,除非 bottomView 的顶部强制它变小。

// topView and bottomView have well-defined constraints, and middleView has well defined x-axis/width constraints not shown here
middleView.topAnchor.constraint(isEqual: topView.bottomAnchor).isActive = true

let heightConstraint = middleView.heightAnchor.constraint(isEqualToConstant: 500)
heightConstraint.priority = UILayoutPriority.high
heightConstraint.isActive = true

let bottomConstraint = middView.bottomAnchor.constraint(isLessThanOrEqualTo: bottomView.topAnchor, constant: someMargin)
bottomConstraint.isActive = true // priority is .required by default

除了检查我的 View 高度是否为 500 之外,还有其他方法可以确定这两个约束中的哪一个“有效”吗?假设 bottomView 处于这样的位置,如果强制 middleView 的高度小于 500,heightConstraint 是否有一些属性来确定它已被优先级高于其自身的约束绕过?

我想将 heightConstraint 用作某种“开关”,在满足时触发某些东西。

最佳答案

这无法回答,因为两者 可能都有一些影响。即使无法满足​​非必需的约束,它也会影响布局。来自Auto Layout Guide :

Even if an optional constraint cannot be satisfied, it can still influence the layout. If there is any ambiguity in the layout after skipping the constraint, the system selects the solution that comes closest to the constraint. In this way, unsatisfied optional constraints act as a force pulling views towards them.

自动布局使用约束求解器来计算其值。 (我相信它仍在使用 Cassowary 或接近它的东西。)约束求解器基本上是线性代数引擎。您将一堆线性方程式放入一个矩阵中,然后尝试对它求解一些使一切都“最佳”的向量。该方法的一个权衡是所有问题都一起解决,并且为什么选择特定值并不总是很明显。之所以如此,是因为它是整体解决方案的一部分。 (在这种情况下,CSP 系统与机器学习系统非常相似。它们给出“正确”的答案,但它们并不总是以分支方式(如果逻辑可以的话)提供他们推理的分步步骤。这就是为什么它们很难调试。)

对于您的问题,我会将您的逻辑建立在您真正关心的事情之上。 “约束被解雇”从来都不是你真正关心的事情(特别是因为约束不会“解雇”)。您通常关心结果中的某些内容(例如最终高度),因此您应该检查一下。

关于ios - 确定具有不同优先级的两个布局约束中的哪一个是确定它们影响的维度/ anchor 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50455510/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com