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

iOS 26下UITargetedPreview不响应触摸问题咨询(UICollectionView场景)

iOS 16(推测你提到的iOS 26为笔误)UICollectionView上下文菜单预览视图触摸无响应问题修复

相关API变更说明

iOS 16对UIContextMenu的预览交互逻辑做了调整:系统默认会拦截UITargetedPreview视图的触摸事件,优先用于处理上下文菜单的收起操作,导致自定义预览视图内的子控件(比如按钮)无法接收到触摸事件,表现为点击按钮时菜单直接关闭。

修复方案

方案1:配置UITargetedPreview参数允许用户交互

创建UITargetedPreview时,通过UITargetedPreview.Parameters的interaction属性明确允许预览视图内的交互操作,这是最直接的修复方式:

func collectionView(_ collectionView: UICollectionView, contextMenuConfiguration configuration: UIContextMenuConfiguration, highlightPreviewForItemAt indexPath: IndexPath) -> UITargetedPreview? {
    let customPreviewView = YourCustomPreviewView()
    // 初始化参数并设置交互权限
    let previewParams = UITargetedPreview.Parameters()
    previewParams.interaction = .allowUserInteraction
    
    return UITargetedPreview(view: customPreviewView, parameters: previewParams)
}

方案2:重写预览视图的hitTest方法确保事件传递

如果方案1未生效,可以在自定义预览视图中重写hitTest(_:with:)方法,强制让按钮类控件接收触摸事件:

class YourCustomPreviewView: UIView {
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let result = super.hitTest(point, with: event)
        // 仅拦截按钮的触摸事件,其他交给系统处理
        if result is UIButton {
            return result
        }
        return super.hitTest(point, with: event)
    }
}

额外检查项

  • 确认自定义预览视图的isUserInteractionEnabled属性为true(默认值为true,若被手动修改需重置)
  • 检查按钮的frame是否完全包含在预览视图范围内,超出边界的部分无法响应触摸

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:02:36