【问题标题】:Is there a way to access the priority of constraints placed by UIStackView?有没有办法访问 UIStackView 放置的约束的优先级?
【发布时间】:2016-04-30 14:15:54
【问题描述】:

在使用 UIStackView 的 .hidden 属性时,我得到“无法同时满足约束”。

我知道这是因为我将 Distribution 设置为“平均填充”并将 Spacing 设置为 1,然后隐藏 UIStackView 它尝试将其高度设置为零以动画隐藏它,因此它将具有多个竞争优先级 1000限制创建上述警告。

如果我可以访问由优先级自动设置为 1000 的 UIStackView 创建的间距约束,我可以解决问题并解决警告。

如果我能以某种方式将这些优先级降低到 999,以便隐藏高度优先级获胜,那么我就可以避免警告。

所以我的问题是有没有办法找到由 UIStackView 创建的间距约束,这些约束来自故事板中 StackView 的定义并分配优先级 999?

有点像:对于堆栈视图中的所有约束 { if constrain is a spacing type { set constrain priority to 999 } } 或其他某种算法。

【问题讨论】:

  • 我不敢相信苹果会允许这样的事情:) 你确定这是原因吗?也许更喜欢改变分布然后设置隐藏而不是弄乱内部约束
  • 是的,我确定这就是原因。我已经手动检查过,警告的原因已经在这里讨论和测试过。 UIStackView 的全部目的是使自动布局变得容易,但是如果您在隐藏堆栈时收到警告,那么它就违背了它对需要隐藏的堆栈快速简便的目的。
  • 感谢这对我来说是个新闻,那么更改堆栈属性然后隐藏它呢?
  • 这正是我要问的。我在问如何访问 UIStackView 通过以某种方式循环创建的属性,以便我可以更改间距约束的优先级。
  • 在stackview中隐藏所有组件怎么样?

标签: ios swift autolayout uistoryboard uistackview


【解决方案1】:

间距的优先级基于以下几点:

您可以尝试更改其中任何一项以避免出现警告。查看堆栈视图的.spacing 属性上的Apple's documentation

【讨论】:

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