最终目标是创建与推特iOS应用程序的“我”选项卡上的滚动效果相同的滚动效果,其中分段控件在向下滚动时上升到顶部然后保持固定,除非向上滚动到顶部。
我提出的解决方案如下图所示。顶部有一个视图,一个分段控件和一个分段控件下面的表格视图。所有这些元素都嵌入在占据整个屏幕的滚动视图内(减去标签和导航条)。
这是关键问题:如果从最顶层视图或分段控件向上滑动开始滚动,它会滚动滚动浏览所有元素都嵌入的滚动视图。如果我滚动tableview,它将只滚动自己保持最顶层视图和分段控制不受影响。
无论屏幕上滚动的位置如何,我如何滚动元素嵌入的滚动视图?
答案 0 :(得分:1)
我的一个项目中有类似的布局。我使用了SJSegmentedViewController。
它需要一个headerViewController,中间段的数据源和这些段的viewController数组。
此库允许您从屏幕上的任何位置滚动,而且当用户滚动到顶部时,分段控件会粘到顶部。
以下是如何实现这一点:
首先将模块导入您的班级
import SJSegmentedScrollView
然后为段
创建一个headerViewController和两个viewControllers(Say Video和Tips)let headerViewController = HeaderViewController()
let video = VideoController()
let tips = TipsController()
之后设置这些控制器并设置分段控制的标题如下:
segmentController.headerViewController = header
segmentController.segmentControllers = [video,tips]
video.title = "Video"
tips.title = "Tips"
然后将其添加到容器视图
addChildViewController(segmentController)
containerView.addSubview(segmentController.view)
segmentController.view.frame = self.containerView.bounds
segmentController.didMove(toParentViewController: self)
此处Container View是 UIContainerView
最后但请确保调用子控制器(VideoController,TipsController),在这些控制器中调用此函数后,您可以从屏幕上的任何位置滚动。
extension HomeListingViewController: SJSegmentedViewControllerViewSource {
func viewForSegmentControllerToObserveContentOffsetChange() -> UIView {
//Scrollview in child controllers
return scrollview
}
}
您可以找到完整的文档here
希望这有帮助!