使用自动布局垂直居中子视图

Posted

技术标签:

【中文标题】使用自动布局垂直居中子视图【英文标题】:Vertically center subview using Auto-Layout 【发布时间】:2013-09-01 15:23:29 【问题描述】:

我正在尝试弄清楚如何使用自动布局使视图垂直居中。 我是这项技术的新手,所以它给我带来了一些问题...... 这是我在 Interface Builder 中的控制器:

灰色部分是超级视图,它包含一个自定义视图(黄色)和一个标签(红色);黄色视图固定在超级视图的底部,并且具有固定的高度和宽度。红色视图也有固定的宽度和高度。

我的目标是将我的红色视图垂直居中在灰色视图的可见部分,其可见高度为superview.height - yellowView.height。 我该怎么做? 非常感谢!

【问题讨论】:

您是否需要红色视图在不同尺寸的屏幕上保持输入,并在旋转时保持输入? 不同的屏幕尺寸 【参考方案1】:

最简单的方法是让灰色视图也成为主视图的子视图,然后你可以在 IB 或代码中给标签一个 centerY 约束。如果由于某种原因不能这样做,您可以在代码中更改 centerY 约束的常量值,使其值为黄色视图高度的 1/2。在 IB 中给标签一个 centerY 约束并为其创建一个 IBOutlet(在我的示例中我称之为 centerCon)。我的黄色视图的固定高度是 200。

- (void)viewDidLoad 
    [super viewDidLoad];
    self.centerCon.constant = 100;

【讨论】:

我最终使用了您的解决方案...现在我对自动布局更有信心了!谢谢;) @matteodv,我不知道你什么时候看到我的答案,但我对其进行了编辑以显示更简单的方法。【参考方案2】:

这里最简单的解决方案之一是这样的:

redView.center = CGPointMake(superview.width/2, (superview.height - yellowView.height)/2);

【讨论】:

我知道我可以这样设置它的中心,但我的问题是关于使用 Auto-Layouts 和 IB 将其居中...

以上是关于使用自动布局垂直居中子视图的主要内容,如果未能解决你的问题,请参考以下文章

垂直自动布局子视图

以自定义垂直距离水平居中子视图|斯威夫特

使用自动布局缩放垂直约束

使用自动布局应用与同级视图相同的垂直位置

以编程方式使用自动布局约束在视图中垂直对齐中间的子视图

如何使用自动布局在纵向模式下垂直堆叠视图并在横向模式下水平堆叠视图?