You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带模糊效果的自定义UIView上UISwipeGestureRecognizer触发不稳定问题

解决自定义通知视图手势不触发的问题

核心问题:视图位置超出可交互区域

你的通知视图当前的布局约束将它放在了safeArea上方的状态栏区域,系统会拦截这个区域的触摸事件,导致滑动/点击手势无法被检测到:

// 原约束:视图位于safeArea顶部上方60点,属于状态栏区域
notificationView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 60)

解决方案:调整布局到safeArea内部

修改positionNotification方法中的布局约束,将通知视图放在safeArea的可见交互区域内,比如紧贴safeArea顶部:

private func positionNotification(_ notificationView: UIView, above previousNotificationView: UIView?) {
    notificationView.translatesAutoresizingMaskIntoConstraints = false
    if let previousView = previousNotificationView {
        NSLayoutConstraint.activate([
            notificationView.bottomAnchor.constraint(equalTo: previousView.topAnchor, constant: -10),
            notificationView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            notificationView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.9),
            notificationView.heightAnchor.constraint(equalToConstant: 60)
        ])
    } else {
        NSLayoutConstraint.activate([
            // 修改为top锚定到safeArea顶部,添加间距
            notificationView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10),
            notificationView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            notificationView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.9),
            notificationView.heightAnchor.constraint(equalToConstant: 60)
        ])
    }
}

额外检查点

  • 验证视图可见范围:给notificationView设置临时背景色(比如.red.withAlphaComponent(0.5)),确认它完全显示在屏幕的可触摸区域内,没有被状态栏或其他系统元素覆盖。
  • 确认手势添加对象正确:你已经将手势添加到notificationView上,且notificationView.isUserInteractionEnabled = true,这部分是正确的;UIVisualEffectView设置了isUserInteractionEnabled = false,不会拦截触摸事件,无需修改。
  • 排查手势冲突:如果后续添加其他手势,可实现UIGestureRecognizerDelegate的gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)方法,允许手势同时触发,但当前场景下不需要。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:39:54