在我的一个视图控制器中,我有一个方形控件,我希望根据用户的设备调整大小。该应用程序将始终以纵向运行。我对控件有纵横比约束以使其保持正方形。
我将控件嵌入到容器UIView中。容器具有将其附加到内容视图的左边缘和右边缘的约束,并且约束将其与容器上方和下方的其他控件隔开。根据iPhone型号,容器视图可以具有比左/右侧(iPhone 4)更长的顶侧/底侧,或者可以具有比顶侧/底侧(iPhone 6)更长的左/右侧。我希望方形控件水平居中,固定到容器的顶部,我希望它扩展以填充容器视图,但保持它的方面。
据我所知,我无法固定边缘或某些约束会破坏,但是当我只锁定顶部时,控件缩小为空。我在控制器上玩过抗压力但没有效果。
如果有一个解决方案而不需要容器视图,那很好。看起来用容器控制会更容易。
答案 0 :(得分:2)
这种情况通常可以通过将优先级降低的等式约束与所需优先级的不等式配对来解决。
因此,例如,一个约束,即方形的前沿等于其超级视图在优先级900的前沿,以及该方形的下边缘小于或等于其超视图在所需优先级的底部的约束。
当超视图比宽视图更高时,前沿将能够重合,因此约束将被满足并且底部将小于超视图的底部,因此将满足约束。当superview比它的宽度短时,一旦底部与superview的底部重合,正方形将无法生长,因为这是一个必需的约束。前沿的约束将被打破,这是可以的,因为它不是必需的,但是自动布局系统仍然会尽可能地接近,这就是使正方形尽可能大的原因。
顺便说一句,抗压性和内容拥抱优先级仅与具有内在大小且仅与内在大小相关的视图相关。容器UIView
没有内在大小,因此这些优先级无关紧要。