VoiceOver读取表标题两次,并始终添加单词“ heading”

时间:2018-11-21 10:02:35

标签: ios swift uitableview accessibility voiceover

这是我的代码:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return self.setupFriendsHeaderView()
}

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    view.accessibilityTraits = .none
    for subView in view.subviews {
        subView.accessibilityTraits = .none
    }
}

func setupFriendsHeaderView() -> UIView? {
    let view = UIView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: tableView.frame.width, height: 44)))

    view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.switchPendingRequestsStatus)))
    view.isAccessibilityElement = true
    view.accessibilityLabel = "Pending requests"

    return view
}

第一次点击标题时,VoiceOver会说:“待处理请求。待处理请求标题。”有时,它无法完成第一句话,而开始讲第二句话。第二次它只是说“待处理请求标头”。我需要做的是只说一次“待处理的请求”,而不要说“标题”。 我看到了建议使用willDisplayHeaderView方法的答案,但这根本没有帮助。

2 个答案:

答案 0 :(得分:0)

如果您要使用VoiceOver显示带有节标题的表格视图而从不说“标题”,那就算了:那是死路一条currently当前没有没有解决方案来完成这种表格视图设计

达到技术目的的最佳方法是创建一个表视图,该表的节标题是具有不同外观的单个单元格。⟹我指定了“技术性”,因为从功能上讲,这既不合适也不可行recommended(适用于VoiceOver用户)。

实际上,节标题是重要的标记,不仅限定特定信息块,而且还允许 借助转子,可以非常快地从一个区域移动到另一个区域。

我想您的目的可能纯粹是视觉上的,因为从功能上来说,它未经任何可访问性专家或VoiceOver用户的批准

就像您所做的那样,我花了很多时间尝试找到针对该“问题”的技术解决方案,但是即使我找到了它(不幸的是我没有找到),我也永远不会肯定已经实现了。

答案 1 :(得分:0)

我遇到了带有自定义UILabel的自定义UITableViewHeaderFooterView的问题。我发现将headerfooterview的accessibilityLabel设置为此自定义标签的文本可以解决此问题。