我正在使用Storyboard创建一个布局,底部包含一个UITableView和一个UIView。我正在使用UIStackView并垂直播放它们。我希望UITableView占据80%的高度,UIView(页脚)占20%。我正在使用UIStackView的Fill Proportionally选项,甚至在Xcode预览中它看起来不错,但是当应用程序运行时它无法正确呈现。这就是我想要的样子:
以下是运行时的样子:
想法?
答案 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
:
然后选择创建的约束并设置适当的乘数:
答案 1 :(得分:7)