滚动 UIScrollView 而不管触摸发生在何处
Scrolling a UIScrollView regardless of where the touch occurs
最终目标是创建与 twitter iOS 应用程序 "Me" 选项卡上的滚动效果相同的滚动效果,当您向下滚动时分段控件会升到顶部然后停留固定到它,除非滚动回顶部。
我想出的解决方案如下图所示。顶部有一个视图,一个分段控件,分段控件下面有一个table视图。所有这些元素都嵌入在占据整个屏幕(减去选项卡和导航栏)的滚动视图中。
这是关键问题:如果通过从最顶层视图或分段控件向上滑动开始滚动,它会滚动嵌入所有元素的滚动视图。如果我滚动 table 视图, 它只会自己滚动并且不影响最顶层的视图和分段控件。
无论滚动发生在屏幕的哪个位置,如何滚动元素嵌入的滚动视图?
我在我的一个项目中有类似的布局。我用了 SJSegmentedViewController.
它需要一个 headerViewController ,中间段的数据源和这些段的 viewController 数组。
此库允许您从屏幕上的任何位置滚动,而且当用户一直滚动到顶部时,分段控件会粘在顶部。
以下是实现此功能的方法:
首先将模块导入到您的 class
import SJSegmentedScrollView
然后为segment
创建一个headerViewController和两个viewControllers(Say Video and 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
最后但要确保调用 child 控制器(VideoController、TipsController),在这些控制器中调用此函数后,您可以从屏幕上的任何位置滚动。
extension HomeListingViewController: SJSegmentedViewControllerViewSource {
func viewForSegmentControllerToObserveContentOffsetChange() -> UIView {
//Scrollview in child controllers
return scrollview
}
}
您可以找到完整的文档here
希望对您有所帮助!
最终目标是创建与 twitter iOS 应用程序 "Me" 选项卡上的滚动效果相同的滚动效果,当您向下滚动时分段控件会升到顶部然后停留固定到它,除非滚动回顶部。
我想出的解决方案如下图所示。顶部有一个视图,一个分段控件,分段控件下面有一个table视图。所有这些元素都嵌入在占据整个屏幕(减去选项卡和导航栏)的滚动视图中。
这是关键问题:如果通过从最顶层视图或分段控件向上滑动开始滚动,它会滚动嵌入所有元素的滚动视图。如果我滚动 table 视图, 它只会自己滚动并且不影响最顶层的视图和分段控件。
无论滚动发生在屏幕的哪个位置,如何滚动元素嵌入的滚动视图?
我在我的一个项目中有类似的布局。我用了 SJSegmentedViewController.
它需要一个 headerViewController ,中间段的数据源和这些段的 viewController 数组。
此库允许您从屏幕上的任何位置滚动,而且当用户一直滚动到顶部时,分段控件会粘在顶部。
以下是实现此功能的方法:
首先将模块导入到您的 class
import SJSegmentedScrollView
然后为segment
创建一个headerViewController和两个viewControllers(Say Video and 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
最后但要确保调用 child 控制器(VideoController、TipsController),在这些控制器中调用此函数后,您可以从屏幕上的任何位置滚动。
extension HomeListingViewController: SJSegmentedViewControllerViewSource {
func viewForSegmentControllerToObserveContentOffsetChange() -> UIView {
//Scrollview in child controllers
return scrollview
}
}
您可以找到完整的文档here
希望对您有所帮助!