以编程方式使用自动布局的 3 个等高视图

Posted

技术标签:

【中文标题】以编程方式使用自动布局的 3 个等高视图【英文标题】:3 equal height views using autolayout programmatically 【发布时间】:2016-12-09 03:15:52 【问题描述】:

我是自动布局的初学者。我以编程方式创建了所有视图。

我想要的是以编程方式使用自动布局进行 3 个等高垂直分割?

我的期望是纵向或横向,所有 3 个视图的高度都会调整,宽度将保持不变(屏幕宽度)

你能举个例子吗?

【问题讨论】:

在询问示例之前,您必须上传您尝试的快照代码。你需要什么输出只需上传一个用户界面 【参考方案1】:

您是否尝试过使用 UIStackView?

lazy var stackView: UIStackView = 
    let stackView: UIStackView = UIStackView(arrangedSubviews: [self.firstView, self.secondView, self.thirdView])
    stackView.axis = UILayoutConstraintAxis.vertical
    stackView.distribution = UIStackViewDistribution.fillEqually
    stackView.alignment = UIStackViewAlignment.fill
    stackView.spacing = 10.0
    return stackView
()

然后使用自动布局使高度为视图的高度之一。 stackView 将处理其他两个视图的高度

【讨论】:

您可能需要在切换方向时更新约束 但我认为这就是自动布局的重点..当方向改变时我不需要做任何事情 这取决于约束使用什么作为值。例如,如果它是恒定的 100 高度,则不需要。但是如果你使用了 superview 的 30% 的高度,那么你将不得不做更多的工作来让它正确渲染,就像在屏幕的高度和宽度之间取最大值一样 @hooliooo 您可能需要添加这一行 stackView.translatesAutoresizingMaskIntoConstraints = false【参考方案2】:

通过从对象库中拖动“垂直堆栈视图”UIStackView 来使用垂直堆栈视图。设置它的自动布局约束并将其划分为您需要的数量。您无需通过代码对其进行管理。

【讨论】:

我的所有视图都已经创建并使用 autoresizingmask。现在转IB会比较难 您也可以在代码中创建堆栈视图,但工作量更大。

以上是关于以编程方式使用自动布局的 3 个等高视图的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式使用自动布局以编程方式添加 UIview?

以编程方式自动布局

以编程方式从超级视图中删除视图后更新约束/框架(自动布局)

使用自动布局的屏幕外 UIView(以编程方式)

以编程方式修改自动布局约束时视图不更新

使用自动布局以编程方式添加背景图像视图