Как вы можете видеть ниже, у меня есть ViewController (назовем его viewController A), который содержит контейнерное представление с ViewController внутри (давайте назовем этот ViewController B).
Итак, что происходит ниже, это когда вы прокручиваете вверх просмотр прокрутки ViewController A, пока вкладка не достигнет вершины.Как только представление вкладок достигнет вершины, представление прокрутки для ViewController B вступит во владение и начнет прокручивать представление контейнера.И когда вы прокручиваете обратно вниз, представление прокрутки viewController B продолжается до тех пор, пока верхняя часть не становится видимой, а затем прокручивается представление viewController A, чтобы вернуть представление заголовка вниз.
Проблема
Таким образом, функция прокрутки работает точнокак я хочу, однако, моя проблема в том, что когда scrollViews переключаются между собой, это не гладко.Пользователь должен поднять палец с экрана и опустить его обратно, пока не будет распознано правильное представление прокрутки.Как сделать так, чтобы пользователь проводил пальцем вверх или вниз по экрану прокрутки, плавно переключаясь между собой и не останавливаясь?Как автоматический переход.
Я смотрел другие посты, но мне не удалось ничего, что могло бы помочь, поэтому любая помощь будет высоко цениться.Заранее спасибо
ViewController 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)
}
}
}
}
ViewController 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)
}
}
}
}