滚动UIScrollView,无论触摸发生在何处

时间:2017-05-05 05:14:08

标签: ios swift uiscrollview tableview scrollview

最终目标是创建与推特iOS应用程序的“我”选项卡上的滚动效果相同的滚动效果,其中分段控件在向下滚动时上升到顶部然后保持固定,除非向上滚动到顶部。

我提出的解决方案如下图所示。顶部有一个视图,一个分段控件和一个分段控件下面的表格视图。所有这些元素都嵌入在占据整个屏幕的滚动视图内(减去标签和导航条)。

这是关键问题:如果从最顶层视图或分段控件向上滑动开始滚动,它会滚动滚动浏览所有元素都嵌入的滚动视图。如果我滚动tableview,它将只滚动自己保持最顶层视图和分段控制不受影响。

无论屏幕上滚动的位置如何,我如何滚动元素嵌入的滚动视图?

enter image description here

1 个答案:

答案 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

希望这有帮助!