在UIStackView

时间:2018-02-22 16:04:03

标签: ios autolayout uistackview

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

enter image description here

以下是运行时的样子:

enter image description here

想法?

2 个答案:

答案 0 :(得分:14)

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

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

  

案例填充比例

     

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

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

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

tableView.heightAnchor.constraint(equalTo: myView.heightAnchor, multiplier: 4).isActive = true

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

enter image description here

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

enter image description here

答案 1 :(得分:7)

在故事板的文档大纲控件中 - 从顶视图拖动到堆栈视图并选择相等高度。现在转到Size Inspector,您应该看到约束。双击它并将乘数设置为0.2。然后更新帧。

enter image description here

将堆栈视图分布保持为Fill。

enter image description here

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

enter image description here

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

enter image description here