• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 当 ScrollView subview 不在屏幕上时,手势识别器不起作用

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:05:06 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的 View Controller 中有一个 UIScrollView,其中有一个 UIView(称为 viewPreSeasonCard)作为内容 View ,全部在界面生成器。然后我以编程方式将 subview 添加到容器中,如下所示:

func displayPreSeason(preSeasons: [PreSeason]) {
    var yPos = 0
    let viewWidth = Int(viewPreSeasonCard.frame.width)
    for (index, preSeason) in preSeasons.enumerated() {
        yPos = 40 + index * 80
        let frame = CGRect(x: 0, y: yPos, width: viewWidth, height: 78)
        let preSeasonView = PreSeasonLineupView(frame: frame)
        preSeasonView.setPreSeason(preSeason: preSeason)
        preSeasonView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.preSeasonClicked)))

        viewPreSeasonCard.frame.size.height += frame.height
        viewPreSeasonCard.addSubview(preSeasonView)
    }

    let curSize = self.view.frame
    scrollView.contentSize = CGSize(width: curSize.width, height: curSize.height + CGFloat(yPos))
}

如您所见,我在添加 subview 后调整 scrollView.contentSize。这一切正常,我可以一直向下滚动 ScrollView 并查看所有 subview 。

问题在于我要添加到 subview 中的 UITapGestureRecognizer。当 subview 最初在设备屏幕上可见时(即前 3 或 4 个 subview ),手势识别器正在工作。但是当我必须滚动查看 subview 时,当我点击它们时,这些 subview 上的手势识别器根本不会触发。好像是因为最初看不到较低的 subview ,所以忽略了手势识别器。

手势识别器的方法如下:

func preSeasonClicked(_ sender: UITapGestureRecognizer) {
    if let preSeasonView = gestureRecognizer.view as? PreSeasonLineupView, let constructorId = preSeasonView.constructorId {
        presenter.preSeasonClicked(constructorId: constructorId)
    }
}



Best Answer-推荐答案


我有同样的问题,我在 ScrollView 中有 ContentView

我发现的问题是我设置的 ContentView 其高度等于 ScrollView 父 View 。我正在计算自己的 ScrollView 的 ContentSize。

所以行为是 ScrollView 正确滚动,但任何 View 在 ViewController 的第一次显示中都处于关闭屏幕无法检测到触摸。

经过一些调试后,我尝试使 ClipToBounds 对 ContentView 是正确的。我看到了我在等待的内容,内容 View 只有屏幕的高度(ScrollView 父级)

我删除了使内容 View 等于 ScrollView 父级高度的约束。 而不是添加了新的约束来将容器 View 的底部与底部大多数 View 的底部对齐,并且不再计算内容大小。

目前滚动工作正常,触摸适用于所有 View 。

关于ios - 当 ScrollView subview 不在屏幕上时,手势识别器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42490279/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap