我正在尝试这种使用 UIScrollView 和 UIStackView 添加多个子 VC 的方法。
我的垂直 stackView 中的第一个 childVC 是一组简单的标签,高度约为 150 磅。
第一个 childVC 下的第二个 childVC 是一个 collectionView,它具有可区分的数据源和组合布局样式,使其看起来像一个 tableView,每个单元格中都有标签和 textview。随着用户添加更多数据,第二个 childVC 的内容将会增长。
我想要的是:
- 将第一个 childVC 固定在顶部,使其不滚动;或者
- 将第一个 childVC 与第二个 childVC 固定在一起,以便它们一起滚动。
现在,当我滚动到第二个 childVC 所在的位置时,第二个 childVC 将滚动,将第一个 childVC 留在原来的位置(在视图顶部)。但是第二个 childVC 不会滚动到列表的底部(单元格被我的 tabBarController 抓住了)。因此,如果我想一直滚动到底部以查看完整列表,我必须从第一个 childVC 滚动。
但是事情变得很时髦,因为出现了两个滚动指示器,如果我想上下滚动,我必须使用滚动指示器,这整个滚动体验变成了一场噩梦
两个子 VC 都有单独的视图子类。例如:
class FirstChildVC: UIViewController {
var firstChildView: FirstChildView!
override func viewDidLoad() {
super.viewDidLoad()
firstChildView = FirstChildView()
view.addSubView(firstChildView)
}
private func configure() {
firstChildView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
firstChildView.topAnchor.constraint(equalTo: view.topAnchor),
firstChildView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: view.frame.height),
firstChildView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
firstChildView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
firstChildView.heightAnchor.constraint(equalToConstant: view.frame.height)
])
}
第二个 childVC 几乎相同,除了约束是:
func configure() {
secondChildView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
secondChildView.topAnchor.constraint(equalTo: view.topAnchor, constant: 150),
secondChildView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
secondChildView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
secondChildView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
secondChildView.heightAnchor.constraint(equalToConstant: view.frame.height)
])
}
如果我没有像这样设置 childViews 的 topAnchors 和/或 heightAnchors,stackView 会重叠。我觉得这很奇怪,因为我认为 stackView 的重点是水平或垂直堆叠,并且添加的每个arrangeSubView 都有它的自己的内容视图。
如何修复它,以便我可以一起滚动第一个 childVC 和第二个 childVC,而不是每个都有自己的滚动指示器?
编辑:这是我所说的时髦滚动的屏幕记录。
编辑2:我发现这种时髦行为的问题是因为随着用户添加更多数据,我的第二个 childVC 的高度会动态增长。现在,第二个 childVC 的视图约束设置为视图的锚点,高度约束设置为,view.frame.height
因为不设置高度约束不会加载视图......我不知道为什么。但是,如果我将高度限制设置为疯狂的东西view.frame.height * 5
然后我得到了我想要的结果,因为第二个 childVC 没有单独的滚动指示器。但是因为这个 VC 动态地改变高度,所以设置一个恒定的高度是一个糟糕的主意,我希望高度随着数据的添加/删除而增长。有任何想法吗?我应该为此发布一个单独的问题吗?(新的堆栈溢出......对不起)