我创建了一个UIAccessibilityElement
的示例,以便提供一组自定义操作以及一些附加信息(即accessibilityLabel
+ accessibilityHint
)
问题是VoiceOver不会宣布自定义操作的存在。它们存在,它们工作,但不会被宣布。而且,自定义操作的提示也不会被宣布。
有什么想法吗?
生成元素的代码如下:
private lazy var accessibilityOverviewElement: UIAccessibilityElement = {
let element = UIAccessibilityElement(accessibilityContainer: self)
element.accessibilityLabel = viewModel.accessibilityOverviewTitle
element.accessibilityHint = viewModel.accessibilityOverviewHint
element.isAccessibilityElement = true
let close = UIAccessibilityCustomAction(
name: viewModel.accessibilityCloseActionTitle,
target: self,
selector: #selector(self.accessibilityDidClose))
close.accessibilityHint = viewModel.accessibilityCloseActionHint
let expand = UIAccessibilityCustomAction(
name: viewModel.accessibilityExpandActionTitle,
target: self,
selector: #selector(self.accessibilityDidExpand))
expand.accessibilityHint = viewModel.accessibilityExpandActionHint
element.accessibilityCustomActions = [close, expand]
return element
}()
我计算元素的框架viewDidLayoutSubviews()
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var frame = view.bounds
frame.size.height = SleepAidMinifiedPlayerViewController.defaultHeight
accessibilityOverviewElement.accessibilityFrameInContainerSpace = frame
}
最后,我需要能够启用/禁用辅助功能,因为此视图控制器从底部滑动并隐藏,但它没有从视图层次结构中完全删除(因此VoiceOver仍然关注其元素)
func setAccessibility(enabled isEnabled: Bool) {
view.accessibilityElements = isEnabled ? [accessibilityOverviewElement, /* + other accessible elements*/].compactMap { $0 } : []
}
谢谢你!
1条答案
按热度按时间q3qa4bjr1#
有什么想法吗?
我已经创建了一个关于这个问题的雷达:- 你好
说明:“在iOS 13中,VoiceOver本身不会宣布可用的操作,即使它们存在:例如,在报警设置中,选择一个报警,但没有读出任何操作 (在iOS 12中可以) 只要它们存在。此外,如果我在应用程序中创建一个带有自定义操作的元素,它们不会在iOS 13中发布,但如果我知道它们在这里,就可以使用它们 (上下滑动即可获得).不过,如果我使用的是针对iOS 12的较旧应用,我的元素包含自定义操作,这些元素在iOS 12设备上发布的“可用操作”中得到了完美的阐述,而iOS 13设备上确实发布了这些操作。请在下一个iOS 13.3版本中纠正这个巨大的转折,因为这对VoiceOver用户来说是非常不利的。”
没有答案,但在未来版本中提供解决方案非常重要:我期待着在下一个release notes中看到这种修正。
然而,您的实现应该使您的应用程序工作如所愿,这不是问题在我看来⇒有很多有用的例子 (代码+插图) 如果你需要进一步解释一些VoiceOver实现。
让你的应用在iOS 12下运行,注意它可以正常运行,而在iOS 13下则不行。😰
(️️️🔳️️🔳️️️2020年3月17日)
问题是VoiceOver不会宣布自定义操作的存在。它们存在,它们工作,但不会被宣布。而且,自定义操作的提示也不会被宣布。
即使你没有提到你正在使用的iOS版本,我也认为这是iOS 13,因为这个奇怪的行为在这个版本中很少出现:苹果网站上没有WWDC视频或信息。😤
这个专门的a11 y网站提到了这个修改 *“iOS 13引入了一个新的自定义操作行为:“可用操作”声明不再总是存在。
它以前提供给包含自定义操作的每个元素,但现在,当您导航到包含不同操作集的另一个元素时,它将发生。
其目的是为了防止在与前一个元素存在相同操作的元素上重复发布公告。"*🤓
请看this SO answer,它突出显示了来自技术支持事件的关于此主题的响应。😉
结论:如果您需要在实现的每个元素上使用自定义操作的声明,请使用iOS 12否则您将不得不使用此新行为,该行为在任何地方都没有解释,而且对VoiceOver用户来说肯定不是有效的。Apple技术支持部门声称这是它的工作方式从现在开始。😰
(️️️🔳️️🔳️️️2022年11月15日)
我已经没有这个问题了,即使在iOS 15.🥳
如果你在iOS 16中仍然处于同样糟糕的情况,我建议你检查一下你是否在设备设置中勾选了辅助功能-VoiceOver-详细功能-动作-说话,使其按预期工作(源)。👍
然而,我还没有从苹果关于我的TSI的消息。😵💫