滚动视图内的pageviewcontroller内的iOS tableview

Posted

技术标签:

【中文标题】滚动视图内的pageviewcontroller内的iOS tableview【英文标题】:iOS tableview inside pageviewcontroller inside scrollview 【发布时间】:2018-12-03 18:06:24 【问题描述】:

我想在滚动视图内的 pageviewcontroller 中放置一个 tableView。

所以我的故事板中有:

所有约束都像这样得到尊重

我禁用了 tableview 滚动,但我的滚动不滚动,我在 TestVC1 中的 tableView 没有展开 TestVC 中的 PagerPlace

如何让我的滚动视图滚动,它的内容大小取决于 tableview 高度 + 我的红色视图?

编辑

我尝试了您的解决方案,然后我得到了这样的故事板: storyboard

然后我的scrollview不滚动,不知道为什么,

【问题讨论】:

不,我想要一个在 TestVC 中的滚动视图,它包含:标题(红色框),类似于 pageviewcontroller(带有标签(白色框))和 uipageviewcontroller 的子项,我有一个自定义大小的表格视图,所以我想滚动所有页面,而不仅仅是我的表格视图 这是我在 UIPageViewController 上的经典答案——也许会有所帮助。 ***.com/questions/18398796/… 不,它不会左右翻页 你是说有一个表格视图,它位于红色区域下方?对吗? 在我的情况下,我有 2 个 uipageviewcontroller 的孩子,每个孩子都有 1 个 tableview,但想象一下,如果只有 1 个选项卡有一个 tableview,另一个没有,我该如何实现它? 【参考方案1】:

为了让你的效果完美。

Scroll View -> UIPageViewController's view -> UITableView

Scroll View 有 UIPageViewController 的视图的子视图,

UIPageViewController 有很多页面,一个页面(一个控制器的视图)有一个 UITableView 的子视图


是的。您可以更改解决方案。

mainScrollView ( vertical slide ) -> contentScrollView ( horizontal slide ) -> contentStackView ( has many pages) -> UITableView ( one page )

mainScrollView是UIScrollView,垂直滑动,

contentScrollView是UIScrollView,横向滑动

contentScrollView.isPagingEnabled = true

模拟UIPageViewController

contentStackView有很多页,一页是你的UITableView


让它像这样工作:

如何让我的滚动视图滚动,它的内容大小取决于 tableview 高度 + 我的红色视图?

对于 UITableView 上面的部分

   public func scrollViewDidScroll(_ scrollView: UIScrollView) 
        
        if scrollView == mainScrollView 
            // vertical
            let offsetY = scrollView.contentOffset.y
            if offsetY >= sillValue 
                scrollView.contentOffset = CGPoint(x: 0, y: sillValue)
                currentChildScrollView?.am_isCanScroll = true
                scrollView.am_isCanScroll = false
             else 
                let negScroll = (scrollView.am_isCanScroll == false)
                if negScroll
                    scrollView.contentOffset = CGPoint(x: 0, y: sillValue)
                
            
         
    

对于 UITableView 部分

使用 KVO 控制基本滚动视图的偏移量 Y,

UITableView 的偏移量 Y 是默认的。

let keyValueObservation = currentChildScrollView?.observe(\.contentOffset, options: [.new, .old], changeHandler:  [weak self] (scrollView, change) in
            guard let self = self, change.newValue != change.oldValue else 
                return
            
            self.childScrollView(didScroll: scrollView)
        )



internal func childScrollView(didScroll scrollView: UIScrollView)
        let scrollOffset = scrollView.am_originOffset.val
        
        let offsetY = scrollView.contentOffset.y
        
        if scrollView.am_isCanScroll == false 
            scrollView.contentOffset = scrollOffset
        
        else if offsetY <= scrollOffset.y 
            scrollView.contentOffset = scrollOffset
            scrollView.am_isCanScroll = false
            mainScrollView.am_isCanScroll = true
        
    

the full code in github

【讨论】:

以上是关于滚动视图内的pageviewcontroller内的iOS tableview的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 PageViewController 中会出现这种类型的滚动?

如何将参数从容器视图的父 ViewController 传递到该容器视图的 PageViewController?

滚动视图内的“绝对位置”视图

目标 c - 滚动视图内的多个滚动视图

颤动中滚动视图内的Listview

为啥滚动时列表视图项目内的图像视图会消失?