我创建了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 } : [] }
谢谢!
我创建了UIAccessibilityElement的实例,以提供一组自定义操作以及一些其他信息(即accessibilityLabel + accessibilityHint)。问题是...