我不了解约束优先权

时间:2016-02-19 16:56:00

标签: ios autolayout

enter image description here

我使用以下约束创建一个rect:

enter image description here

我虽然如果我优先考虑width >=250999的约束,那么宽度equal == 200将适用于小型设备,而width >= 250则适用于大型。

但它没有奏效。我阅读了文档:

  

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

     

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

2 个答案:

答案 0 :(得分:4)

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

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

Cocoa Autolayout: content hugging vs content compression resistance priority

答案 1 :(得分:1)

iOS就是你说的。根据屏幕大小,约束不会自动禁用。首先应用具有较高优先级的约束。

因此,当iOS需要布局视图时,它将查找您提供的规范。现在,根据您给出的规范,无论屏幕大小如何,视图的宽度都应为200(最高优先级)。因此,应用此约束,您将获得宽度为200的视图。

你怎么能做你想做的事?

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

用于禁用/启用约束 -

Stackoverflow Link

Apple Developer Library