2015-10-21 48 views
1

在我的一个视图控制器中,我有一个方形控件,我想根据用户的设备调整大小。该应用将始终以纵向模式运行。我在控件上有一个宽高比约束来保持它的平方。展开方形视图,使用自动布局填充矩形超级视图

我有控制嵌入容器UIView。容器具有将其附加到内容视图的左边和右边的约束,并且约束将其与容器上方和下方的其他控件隔开。根据iPhone的型号,容器视图可以具有比左/右侧(iPhone 4)更长的顶/底侧,或者其可以具有比顶侧/底侧(iPhone 6)更长的左侧/右侧。我希望方形控件能够水平居中,固定在容器的顶部,我希望它可以扩展以填充容器视图,但仍然保持它的方面。

据我所知,我不能固定边缘或某些约束会断开,但是当我只固定顶部时,控制缩小为无。我在控制系统上玩过抗压,但没有效果。

如果没有需要容器视图的解决方案,那很好。这似乎是容易控制容器。

回答

2

像这样的情况通常可以通过将优先级降低的平等约束与需要优先级的不平等配对来解决。

因此,例如,一个约束,即正方形的前沿等于其优先级为900的超级前沿前沿,并且约束该正方形的底部边沿小于或等于其超级视图底部所需的优先级。

当超级视图高于宽度时,前沿可以重合,这样约束将得到满足,并且底部将小于超视图的底部,以便满足约束。当超视图的宽度比宽度小时,一旦底部与超视图的底部重合,正方形将不能增长,因为这是一个必需的限制。前缘的约束将被打破,这是可以的,因为它不是必需的,但是自动布局系统仍然会尽可能地接近,这就是正方形的大小。

顺便说一下,抗压缩和内容拥抱的优先级只与视图具有固有尺寸并仅与该固有尺寸有关。容器UIView没有固有尺寸,所以这些优先级是无关紧要的。