使用自动布局扩展方形视图以填充矩形超级视图
Posted
技术标签:
【中文标题】使用自动布局扩展方形视图以填充矩形超级视图【英文标题】:Expand Square View to Fill Rectangular Superview Using Auto Layout 【发布时间】:2015-10-21 02:56:31 【问题描述】:在我的一个视图控制器中,我有一个方形控件,我想根据用户的设备调整其大小。该应用程序将始终以纵向运行。我对控件有一个纵横比约束以使其保持正方形。
我将控件嵌入到容器 UIView 中。容器具有将其附加到内容视图的左右边缘的约束,并具有将其与容器上方和下方的其他控件隔开的约束。根据 iPhone 型号,容器视图的顶部/底部可以比左侧/右侧更长(iPhone 4),或者它可以具有比顶部/底部更长的左侧/右侧(iPhone 6)。我希望方形控件水平居中,固定在容器的顶部,并且我希望它展开以填充容器视图,同时保持它的外观。
据我所知,我无法固定边缘,否则某些约束会破坏,但是当我只固定顶部时,控件会缩小到零。我在控件上玩过压缩阻力,但没有效果。
如果有不需要容器视图的解决方案,那很好。似乎用容器更容易控制。
【问题讨论】:
【参考方案1】:此类情况通常可以通过将降低优先级的等式约束与所需优先级的不等式配对来解决。
因此,例如,正方形的前缘等于其父视图在优先级 900 的前缘的约束,以及正方形的底边小于或等于其父视图在所需优先级的底部的约束。
当父视图的高度大于宽度时,前缘能够重合,从而满足约束,底部小于父视图的底部,从而满足约束。当superview短于宽时,一旦其底部与superview的底部重合,正方形将无法增长,因为这是必需的约束。前缘的约束将被打破,这没关系,因为它不是必需的,但自动布局系统仍会尝试尽可能靠近,这就是使正方形尽可能大的原因。
顺便说一句,抗压缩和内容拥抱优先级仅与具有固有大小且仅与该固有大小相关的视图相关。容器 UIView
没有固有大小,因此这些优先级无关紧要。
【讨论】:
以上是关于使用自动布局扩展方形视图以填充矩形超级视图的主要内容,如果未能解决你的问题,请参考以下文章