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

iOS无障碍开发中UIAccessibilityCustomAction触发Drag播报的原因是什么?

Drag播报的本质

你听到的额外播报Drag是iOS系统为支持拖拽能力的元素自动添加的无障碍操作项,不需要开发者手动加入accessibilityCustomActions数组就会被VoiceOver识别并播报。

产生原因

出现这个默认操作的核心条件是当前element满足以下任意一种情况:

  • 元素本身或者其父视图上被添加了iOS 11+的UIDragInteraction拖拽交互,部分系统原生控件(如UITableViewCell、UICollectionViewCell)在开启排序、编辑功能时会自动添加该交互,不需要开发者主动调用
  • 元素的accessibilityDragSourceDescriptors属性被赋值为非空值,该属性是iOS 13+新增的用于定义无障碍拖拽行为的属性,只要值非空,系统就会自动把拖拽操作加入无障碍操作列表

可选屏蔽方案

如果你的业务不需要该拖拽能力,可通过以下代码关闭播报:

// 方案1:移除元素上的拖拽交互
for (UIInteraction *interaction in element.interactions) {
    if ([interaction isKindOfClass:[UIDragInteraction class]]) {
        [element removeInteraction:interaction];
        break;
    }
}

// 方案2:直接清空拖拽相关的无障碍描述符(优先级更高)
element.accessibilityDragSourceDescriptors = nil;
// 若同时出现"Drop"的额外播报,也可同步清空投放描述符
element.accessibilityDropPointDescriptors = nil;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:18:03