如何使用 AutoLayout 使两个视图居中

Posted

技术标签:

【中文标题】如何使用 AutoLayout 使两个视图居中【英文标题】:How to keep two views centered using AutoLayout 【发布时间】:2013-02-21 20:32:22 【问题描述】:

我有两个按钮,我希望将它们作为一个组保持在他们的超级视图中。

以视觉格式表达我想要|-*-[button1]-5-[button2]-*-| 之类的东西,其中* 应该相等并由AutoLayout 自动确定。

我目前有三种解决方法,它们看起来都不是很优雅

    将 UIView 的两个按钮子视图设为该视图的中心

    手动计算*的值,手动更新约束

    将两个按钮与超级视图的中心对齐,并根据按钮宽度手动计算偏移量

还有其他建议吗?

【问题讨论】:

【参考方案1】:

我认为我过于关注将两个按钮的中心与它们的超级视图对齐。当我开始考虑边缘时,我想出了这个

[NSLayoutConstraint constraintWithItem:button1
                             attribute:NSLayoutAttributeRight
                             relatedBy:NSLayoutRelationEqual
                                toItem:superview
                             attribute:NSLayoutAttributeCenterX
                            multiplier:1
                              constant:-2.5]];

[NSLayoutConstraint constraintWithItem:button2
                             attribute:NSLayoutAttributeLeft
                             relatedBy:NSLayoutRelationEqual
                                toItem:superview
                             attribute:NSLayoutAttributeCenterX
                            multiplier:1
                              constant:2.5]];

这使两个按钮保持在superview 的中心,中间间距为 5。

【讨论】:

【参考方案2】:

您可以将虚拟元素(隐藏视图)居中,然后将每个按钮向左和向右偏移。

【讨论】:

创建另一个视图是我想要避免的。不过谢谢你的建议。我引导我找到自己的答案,见上文

以上是关于如何使用 AutoLayout 使两个视图居中的主要内容,如果未能解决你的问题,请参考以下文章

Autolayout - 当一个视图具有动态高度时,在 UITableViewCell 中垂直居中两个视图

如何使 AutoLayout 适应不断变化的图像尺寸

AutoLayout正确定位按钮

如何使两个标签居中

Xcode Autolayout:标签在两个邻居之间居中[重复]

使用 AutoLayout 在 UITableViewCell 中垂直居中多个 UILabel?