在UIStackView中按比例填写

joh*_*doe 15 ios autolayout uistackview

我正在使用Storyboard创建一个布局,底部包含一个UITableView和一个UIView.我正在使用UIStackView并垂直播放它们.我希望UITableView占据80%的高度,UIView(页脚)占20%.我正在使用UIStackView的Fill Proportionally选项,甚至在Xcode预览中它看起来不错,但是当应用程序运行时它无法正确呈现.这是我想要的样子:

在此输入图像描述

以下是它运行时的样子:

在此输入图像描述

想法?

Mil*_*sáľ 19

您需要设置一个显式约束,使tableView.height比视图大小大4倍.它们没有固有的内容大小,因此stackView不会"知道"如何正确填充空间.

此外,将分发模式设置为.fill,因为.fillProportionally使用内在内容大小来确定正确的分布(摘自docs):

案例填充比例

堆栈视图调整其排列视图大小的布局,以便它们沿堆栈视图的轴填充可用空间.视图根据堆栈视图轴的内在内容大小按比例调整大小.

使用约束我们明确地设置大小,而不是使用内在内容大小 - 因此.fillProportionally不起作用.在这种情况下,我假设直接stackView返回的使用值view.intrinsicContentSize.但是,约束不会改变view.intrinsicContentSize.

如果您要在代码中执行此操作,则可以使用以下代码执行此操作:

tableView.heightAnchor.constraint(equalTo: myView.heightAnchor, multiplier: 4).isActive = true
Run Code Online (Sandbox Code Playgroud)

在故事板中,控制拖动tableView到myView并选择Equal Heights:

在此输入图像描述

然后选择创建的约束并设置适当的乘数:

在此输入图像描述


Gih*_*han 10

在情节提要的文档大纲控件中,从顶视图拖动到堆栈视图,然后选择等高。现在转到“大小”检查器,您应该会看到约束。双击它,并将乘数设置为0.2。然后更新框架。

在此处输入图片说明

保持堆栈视图分布为填充。

在此处输入图片说明

控制从view2到view1的拖动以创建相等的高度约束。

在此处输入图片说明

转到约束并将乘数设置为0.2。

在此处输入图片说明