1

我正在使用 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()等。

4

0 回答 0