我有一个UIPageViewController
,其中包含ContentUIViewController
的数组,它们中有滚动视图。
当滚动视图滚动时,我想在UIPageViewController
(作为子项添加)的父级的视图控制器中识别出这一点
实现此目标的最佳途径是什么?目前,我尝试将didScroll
委派回ContentUIViewController
的视图模型,然后将其馈送到UIPageViewController
的父级中以调整要折叠的标题高度,但它没有工作正常/非常hacky
是否有一种方法可以将子vc中的委托输出读取到父vc,而又不通过视图模型将其反馈回来?由于UIPageViewController
的数组性质,而不是单个子VC,这被证明是棘手的。
已更新:
private func generateContentControllers() -> [UIViewController] {
var viewControllers: [UIViewController] = []
viewControllers.append(ScrollableContentViewController(contentViews: infoViews))
viewControllers.append(reviewsVC)
viewControllers.append(ScrollableContentViewController(contentViews: helpViews))
}
return viewControllers
}
通过
提供var scrollingViewControllers: [UIViewController] { get }
添加了
if let firstViewController = self.viewModel.scrollingViewControllers.first {
pagingController.setViewControllers([firstViewController], direction: .forward, animated: false)
}
答案 0 :(得分:1)
这是如何使它工作的方法。
1。。在handler
中创建一个ContentUIViewController
,对于每次scrollViewDidScroll(_:)
的更改将以contentOffset
方法进行调用。
class ContentUIViewController: UIViewController, UIScrollViewDelegate {
var handler: ((CGPoint)->())?
func scrollViewDidScroll(_ scrollView: UIScrollView) {
handler?(scrollView.contentOffset)
}
}
2。。在ParentVC
中,创建一个UIPageViewController
的实例,并将其作为一个child
添加到其中。我想你已经做到了。
接下来需要做的是创建一个array
的{{1}},并为每个实例设置我们之前创建的ContentUIViewController
。
每次在特定的handler
中滚动handler
时,都会调用此scrollView
。我们将在此处获得ContentUIViewController
中的contentOffset
。用获得的scrollView
调用updateHeaderHeight(for:)
来调整contentOffset
的高度。
header