我正在尝试创建如下结构的布局:
- View
-- ScrollView
--- ContentView
---- CustomView
---- CustomView
---- TableView
---- CustomView
tableView
本身可以使用“ invalidateIntrinsicContentSize”自动调整大小,当我添加项目时,tableview
的高度会发生变化,将其下方的自定义视图进一步向下推。
一旦添加了足够多的项目,我的底部自定义视图就会被隐藏,并且滚动无法正常工作。
重要事实-底部自定义视图没有底部约束。它的最高约束将其向下推到tableView
。
如果我设置了底部约束,则表视图将不再动态调整大小。
预期的行为:
当用户向列表中添加项目并且列表太大时,ContentView将可以滚动,因此用户可以滚动以查看底部的view
。
实际行为: 当用户向列表中添加项目时,如果列表太大,则会向下推底视图,并且视线和内容无法滚动。
正在发生什么,我该如何解决?
答案 0 :(得分:1)
您可以为表视图高度创建一个约束,并通过拖动其他视图时将其引用到您的swift文件。现在在您的代码中,只需执行此操作
tableViewHeightConstraint.constant = tableViewNoOfItems * tableViewCellHeight;
如果在scrollview中完美地设置了其他约束,则它应该可以正常工作。意味着TableView
应该具有top
的{{1}},bottom
,left
,right
的边距约束。
答案 1 :(得分:1)
以下是我认为正在发生的事情。
由于您正在使用UITableView
,因此它具有自己的滚动视图。因此,当UITableView
列表太大时,UITableView本身就可以滚动,而不是ScrollView的contentView可以滚动。
要实现所需的功能,必须使UITableView
不可滚动,并使用intrinsicHeight
中的UITableView
来获取UITableView
的实际高度以及所有项目。如果您拥有高度不同的项目,这将是一个问题,因为在渲染之前您将不知道高度。在所有行的高度相同的情况下,您可以获取UITableView
的总高度并将高度约束设置为该值。这将增加外部contentSize
的{{1}},使其可滚动。
除ScrollView
外,您还可以使用UITableView
。这是因为您始终没有使用UIStackView
的重用功能。管理UITableView
和datasource
应该不是大问题。
答案 2 :(得分:0)
尝试此代码
tblViewHeight.constant = CGFloat( tableview row count * 45 )
var size = contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
if size.height < scrollView.frame.size.height
{
size = scrollView.frame.size
}
contenViewHeight.constant = size.height - scrollView.frame.size.height
scrollView.contentSize.height = contenViewHeight.constant
答案 3 :(得分:0)
我认为您可以做的是:
tableView.isScrollEnabled = false
还将带有垂直轴和.fillEqually
分布的UIStackView用作内容视图会更加方便,因为您不需要为视图设置任何位置约束,但是如果固有内容,则可能需要设置高度约束大小无法由引擎决定