【问题标题】:Scrolling a UIScrollView regardless of where the touch occurs无论触摸发生在哪里,都滚动 UIScrollView
【发布时间】:2017-05-05 05:14:07
【问题描述】:

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

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

这是关键问题:如果通过从最顶层视图或分段控件向上滑动开始滚动,它会滚动嵌入所有元素的滚动视图。如果我滚动 tableview,它只会滚动自身并且不影响最顶层的视图和分段控件。

无论滚动发生在屏幕上的哪个位置,如何滚动嵌入元素的滚动视图?

【问题讨论】:

    标签: ios swift uiscrollview tableview scrollview


    【解决方案1】:

    我的一个项目中有一个类似的布局。我用SJSegmentedViewController

    它需要一个 headerViewController ,中间段的数据源和这些段的 viewController 数组。

    此库允许您从屏幕上的任何位置滚动,而且当用户一直滚动到顶部时,分段控件会粘在顶部。

    您可以通过以下方式实现:

    首先将模块导入你的类

    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

    最后,请确保调用子控制器(VideoController,TipsController),在这些控制器中调用此函数后,您可以从屏幕上的任何位置滚动。

    extension HomeListingViewController: SJSegmentedViewControllerViewSource {
    
        func viewForSegmentControllerToObserveContentOffsetChange() -> UIView {
            //Scrollview in child controllers
            return scrollview 
        }
    }
    

    你可以找到完整的文档here

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多