使用自动布局扩展方形视图以填充矩形超级视图

Expand Square View to Fill Rectangular Superview Using Auto Layout

在我的一个视图控制器中,我有一个方形控件,我想根据用户的设备调整它的大小。该应用程序将始终 运行 纵向。我对控件设置了纵横比限制以使其保持正方形。

我将控件嵌入到容器 UIView 中。容器具有将其附加到内容视图的左右边缘的约束以及将其与容器上方和下方的其他控件隔开的约束。根据 iPhone 模型,容器视图的 top/bottom 边可以比 left/right 边长(iPhone 4),或者它的 left/right 边可以比 left/right 边长top/bottom 面(iPhone 6)。我希望方形控件水平居中,固定到容器顶部,我希望它展开以填充容器视图,但保持纵横比。

据我所知,我无法固定边缘,否则某些约束会被破坏,但是当我只固定顶部时,控件会缩小到什么都没有。我在控件上尝试过压缩阻力,但没有效果。

如果有不需要容器视图的解决方案,那很好。只是好像用容器控制起来会更容易一些。

这种情况通常可以通过将降低优先级的等式约束与所需优先级的不等式配对来解决。

因此,例如,在优先级为 900 时正方形的前沿等于其父视图的前沿的约束以及在所需优先级时正方形的底边小于或等于其父视图底部的约束。

当父视图的高度大于宽度时,前缘能够重合,从而满足约束条件,底部小于父视图的底部,从而满足约束条件。当 superview 短于它的宽度时,一旦它的底部与 superview 的底部重合,正方形将无法增长,因为这是一个必需的约束。前缘的约束将被打破,这没关系,因为它不是必需的,但自动布局系统仍会尝试尽可能靠近,这就是使正方形尽可能大的原因。

顺便说一句,抗压缩和内容拥抱优先级仅与具有固有大小的视图相关,并且仅与该固有大小相关。容器 UIView 没有固有大小,因此这些优先级无关紧要。