我正在使用 2 个滚动视图当内部滚动视图向上滚动时,外部滚动视图也向上移动(正 contentoffset.y),当内部 SV 的 contentoffset.y 小于 y 时,两个滚动视图都会返回到它们的原始位置。
这里是代码: //secondView 是一个 UIView 里面的 outerScrollView 和上面的内部 SV(scrollView)。
var scollView: UIScrollView!
var yOffset: CGFloat!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.automaticallyAdjustsScrollViewInsets = true
self.outerScrollView.delegate = self
self.scrollView = UIScrollView(frame: CGRect(x: 0, y: self.secondView.frame.origin.y + self.secondView.frame.height, width: self.view.frame.width, height: self.view.frame.height - (264)))
self.scrollView.delegate = self
self.outerView.addSubview(self.scrollView)
self.scrollView.setContentOffset(CGPoint.zero, animated: true)
}
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
if (scrollView == self.scrollView) {
if (scrollView.contentOffset.y > 0) {
if (self.outerScrollView.contentOffset.y <= 0 ) {
let contentnOffset:CGPoint = CGPoint(x: 0.0, y: self.yOffset)
DispatchQueue.main.async {
self.outerScrollView.setContentOffset(contentnOffset, animated: true)
self.scrollView.frame.size = CGSize(width: self.view.frame.width, height: self.view.frame.height - self.qLabel.frame.height - 9)
if (scrollView.contentSize.height < self.view.frame.height - self.qLabel.frame.height - 9) {
let downPanGesture: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(self.handlePan))
downPanGesture.direction = .down
self.scrollView.addGestureRecognizer(downPanGesture)
}
}
}
} else {
DispatchQueue.main.async {
self.outerScrollView.setContentOffset(CGPoint.zero, animated: true)
self.scrollView.frame.size = CGSize(width: self.view.frame.width, height: self.view.frame.height - (self.scrollView.frame.origin.y))
}
}
}
}
尽管一切正常,但只有 1 个小问题。在内部 scrollView 向上滚动并且 contentoffset 已更改并且我想继续滚动此视图后,它有时只是不滚动(向上)。所以,我必须先向下滚动它,然后它会再次开始正常滚动。它很少发生,但很烦人。
谁能告诉我可能是什么问题?谢谢!
PS我已经尝试了所有其他scrollView的委托方法,如didenddecelerating()或didenddragging()等。