如果在子视图(包含可滚动的UICollectionView)中滚动,则取消UIScrollView中的滚动 (SWIFT)

问题描述 投票:1回答:1

我有现在的结构。(-> 表示子视图)

UIScrollView

  • pageOne:UIView
  • pageTwo:UIView -> collection: UICollectionView

pageOne和pageTwo是UIScrollView的子视图,pageTwo包含一个CollectionView)。

我试图在集合内检测到滚动(拖动)时取消父UIScrollView的滚动。我是通过为pageTwo构造一个UIPanGestureRecognizer来实现的。当检测到拖动时,我设置。

UIScrollView.isScrollingEnabled = falsecollection.isScrollingEnabled = true

当UIPanGestureRecognizer.State.ended(在pageTwo中停止拖动)时,我设置:

UIScrollView.isScrollingEnabled = truecollection.isScrollingEnabled = false

我已经验证了该函数正确识别拖动结束拖动,但由于某些原因,虽然正确检测到pageTwo内的拖动,但UIScrollView继续滚动。更具体地说,当在pageTwo中拖动并成功地将UIScrollView滚动改为false,并将collection滚动改为true时,最初的点击导致UIScrollView滚动(技术上说是页面,因为ScrollView的isPagingEnabled为true),回到pageOne的顶部。

  1. 集合&UIScrollView delegate等于viewController类。
  2. DelayTouchDown对UIScrollView来说是true。
  3. 集合&scrollView都是垂直滚动的。

有什么建议吗?

(如果我这个问题的格式不对,抱歉,第一次发帖)

ios swift uicollectionview uiscrollview uipangesturerecognizer
1个回答
0
投票

已解决

我具体遇到的问题是关于

UIScrollView.isPagingEnabled = true

当将isPagingEnabled设置为false,并使collection.isScrollingEnabled时。始终 设置为true(而不是像上面所说的那样切换到false),用户界面就会像预期的那样工作。

© www.soinside.com 2019 - 2024. All rights reserved.