正如你在下面看到的,我有一个 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)
}
}
}
}