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
相关产品推荐
相关产品推荐

