【问题标题】:I don't understand constraints priority我不明白约束优先级
【发布时间】:2016-02-19 16:56:00
【问题描述】:

我创建了一个具有以下约束的矩形:

如果我将约束的优先级设置为width >=250999,那么宽度equal == 200 将适用于小型设备,而width >= 250 适用于大型设备。

但它不起作用。我阅读了文档:

在解决了所需的约束之后,自动布局会尝试 按从高到低的优先级顺序解决所有可选约束 最低。如果它不能解决可选约束,它会尝试 尽可能接近想要的结果,然后继续 下一个约束。

这种不平等、平等和优先事项的组合为您提供 很大的灵活性和力量。通过组合多个 约束,您可以定义动态适应大小的布局 用户界面中元素的位置和位置发生变化。

【问题讨论】:

  • 如果你有一个约束说你的宽度应该是 200,并且这个约束是必需的,那么它总是 200 点宽。我在您列出的约束中看不到任何会导致它们的约束切换到您的 >=250 约束的内容。如果有足够的空间,您将需要添加诸如前导和尾随约束之类的东西,以尝试使框变宽。
  • 只有当两个约束冲突时,优先级才会成为决胜局。因此,您不能只拥有width >= 250 的单一约束,并期望图像的大小会根据设备中视图的大小而增长。您必须添加其他约束,以允许自动布局针对新添加的约束考虑这种不等式。

标签: ios autolayout


【解决方案1】:

将应用约束的优先级以解决两个不同约束之间的冲突。框架的视图将被修改,应用更高优先级的约束。因此,您应该有另一个视图或使用超级视图将优先级应用于约束。

这是解释阻力优先级的一个很好的答案:

Cocoa Autolayout: content hugging vs content compression resistance priority

【讨论】:

    【解决方案2】:

    iOS 会按您说的做。约束不会根据屏幕尺寸自动禁用。优先级较高的约束将首先应用。

    因此,当 iOS 需要布局您的视图时,它会查找您提供的规范。现在,根据您给定的规范,无论屏幕尺寸如何,视图的宽度都应为 200(最高优先级)。所以这个约束被应用,你得到宽度为 200 的视图。

    你怎么能做你想做的事?

    您应该尝试禁用“宽度”规范为 200 的约束,当您的应用在大屏幕上运行时,您的其他约束将起作用并给出正确的结果。

    用于禁用/启用约束 -

    Stackoverflow Link

    Apple Developer Library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多