在TableView中删除一行后如何解决画外音

时间:2019-04-04 07:40:53

标签: ios swift accessibility voiceover

删除一行后,我在解决画外音时遇到了一些问题。结构是这样的:

我有一个包含2个部分的表格视图。

  • 第一部分的标题高度为0,只有一行可变高度。
  • 第二部分有一个固定高度的标题,里面有一个按钮;此部分中的行可以为“ n”。 当用户点击标题内的按钮时,将根据先前的状态删除或重新插入第一部分中的单元格。

在单元已扩展的正常“状态”下,画外音效果很好。当用户点击按钮并删除第一部分中的行时,画外音中断。如果我从上到下浏览都可以。相反,当您向上滚动时,vo会读取屏幕上可见的单元格,但会读取其下面的单元格之前的第一部分的标题。

插入和删除非常简单:

let indexPath = IndexPath(row: 0, section: 0)
if isExpanded {
   if tableView.contentOffset.y <= 0 {
       tableView.insertRows(at: [indexPath], with: .automatic)
   } else {
       tableView.reloadData()
       tableView.scrollToRow(at: indexPath, at: .top, animated: true)
   }
} else {
   tableView.deleteRows(at: [indexPath], with: .automatic)
}
每个部分中的

单元格具有:isAccessibilityElement = false

可访问性元素是像这样的单元格内部的卡:

cardView.isAccessibilityElement = true
cardView.accessibilityTraits = .button

非常感谢您的帮助,我尝试了不同的解决方案,但没有一个起作用。真是头疼!

如果您需要更多信息来解决此问题,请告诉我。 谢谢。

1 个答案:

答案 0 :(得分:0)

通过在第一部分中始终保持一行来解决此问题。

git checkout branchOfThePR

但是当变量isExpanded为false时,第一部分中的行的高度将设置为0,而不是自动。

tableView.performBatchUpdates({
     tableView.deleteRows(at: [indexPath], with: .fade)
     tableView.insertRows(at: [indexPath], with: .fade)
}, completion: nil)