iOS tableview里面的pageviewcontroller里面的scrollview

时间:2018-12-03 18:06:25

标签: ios swift uitableview scrollview

我想将tableView放在滚动视图内的pageviewcontroller内。

所以我在故事板中:

soryboard

像这样尊重所有约束

enter image description here

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

如何使滚动视图滚动,其内容大小取决于表格视图高度+红色视图?

编辑

我尝试了您的解决方案,然后得到了一个演示图板,如下所示: storyboard

然后我的滚动视图不滚动,我也不知道为什么,

1 个答案:

答案 0 :(得分:0)

为了让你的效果完美。

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


让它像这样工作:

<块引用>

如何让我的 scrollview 滚动,其内容大小取决于 tableview 高度 + 我的 red view?

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