4

正如你在下面看到的,我有一个 ViewController(我们称之为 viewController A),它包含一个容器视图,里面有一个 ViewController(我们称之为 ViewController B)。

所以下面发生的事情是当你向上滚动 ViewController A 的滚动视图时,直到 tabview 到达顶部。一旦 tabview 到达顶部,ViewController B 的滚动视图就会接管并开始滚动容器视图。当您向下滚动时,viewController B 的滚动视图会一直移动到顶部可见,然后视图控制器 A 的滚动视图会接管以将标题视图拉回。

问题

所以滚动功能完全按照我想要的方式工作,但是我的问题是当滚动视图在彼此之间切换时它不流畅。在识别出正确的滚动视图之前,用户必须抬起屏幕的手指并将其放回原处。当用户向上或向下滑动滚动视图时,我该如何做到这一点?就像一个自动过渡。

我看过其他帖子,但我没有找到任何有帮助的东西,所以任何帮助都将不胜感激。提前致谢

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

视图控制器 A

import Foundation
import UIKit
import XLPagerTabStrip

class viewControllerA: ButtonBarPagerTabStripViewController {

      @IBOutlet weak var containerHeightConstraint: NSLayoutConstraint!
      @IBOutlet weak var scrollView: UIScrollView! 
      @IBOutlet weak var contentView: UIView!
      @IBOutlet weak var headerView: HeaderView!
      @IBOutlet weak var tabView: ButtonBarView!    
      @IBOutlet weak var viewContainer: UIScrollView!

        override func viewDidLoad() {

       self.scrollView.delegate = self

           NotificationCenter.default.addObserver(self, selector: #selector(EnableScroll), name: NSNotification.Name(rawValue: "enableScroll"), object: nil)

            containerView.isScrollEnabled = false
            self.containerView.bounces = false

            super.viewDidLoad()
        }

    @objc func EnableScroll() {
        self.scrollView.isScrollEnabled = true
    }

        override func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let yOffset = scrollView.contentOffset.y
        if scrollView == self.scrollView {
            if yOffset >= 250 {
                //tabView has reached the top
                //enable ViewController B's scrollViews
                 NotificationCenter.default.post(name: NSNotification.Name(rawValue: "EnableScroll"), object: nil)
            }
        }
    }
}

视图控制器 B

class viewControllerB: UIViewController, IndicatorInfoProvider, UIScrollViewDelegate {

    @IBOutlet weak var scrollView: UIScrollView!

     override func viewDidLoad() {
       super.viewDidLoad(

   self.scrollView.delegate = self

  NotificationCenter.default.addObserver(self, selector: #selector(EnableScroll), name: NSNotification.Name(rawValue: "EnableScroll"), object: nil)
        }

     @objc func EnableScroll() {        
        self.scrollView.isScrollEnabled = true       
            }

      Override func scrollViewDidScroll(_ scrollView: UIScrollView) {

        let yOffset = scrollView.contentOffset.y
        if scrollView == self.scrollView {
            if yOffset <= 0 {
                //scrolling down, top of ViewControllerB is full in view
                self.scrollView.isScrollEnabled = false
                //enables ViewController A's scrollview
                 NotificationCenter.default.post(name: NSNotification.Name(rawValue: "enableScroll"), object: nil)

            }
        }
    }
}
4

0 回答 0