如何在删除 TableView 中的行后修复画外音
How to fix voiceover after deleting a row in a TableView
我在删除一行后修复画外音时遇到了一些问题。结构是这样的:
我有一个包含 2 个部分的表格视图。
- 第一个部分有一个 header 的高度 = 0 并且只有一行可变高度。
- 第二部分有一个header,高度固定,里面有一个按钮;此部分中的行可以是 'n'。
当用户点击 header 内的按钮时,第一部分中的单元格将被删除或根据之前的状态 re-inserted 。
在正常的 'state' 中,单元格展开时画外音效果很好。当用户点击按钮并删除第一部分中的行时,画外音中断。如果我从上到下浏览,一切正常。相反,当您向上滚动时,vo 会读取屏幕上可见的单元格,但会读取第一部分的 header,然后再读取其下方的单元格。
插入和删除非常简单:
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
非常感谢您的帮助,我尝试了不同的解决方案,但 none 都有效。真是头疼啊!
如果您需要更多信息来解决此问题,请告诉我。
谢谢。
通过在第一部分中始终保留一行来解决此问题。
tableView.performBatchUpdates({
tableView.deleteRows(at: [indexPath], with: .fade)
tableView.insertRows(at: [indexPath], with: .fade)
}, completion: nil)
但是当变量 isExpanded 为 false 时,第一部分中的行高设置为 0 而不是自动设置。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 {
return isExpanded ? UITableView.automaticDimension : 0
}
return UITableView.automaticDimension
}
我在删除一行后修复画外音时遇到了一些问题。结构是这样的:
我有一个包含 2 个部分的表格视图。
- 第一个部分有一个 header 的高度 = 0 并且只有一行可变高度。
- 第二部分有一个header,高度固定,里面有一个按钮;此部分中的行可以是 'n'。 当用户点击 header 内的按钮时,第一部分中的单元格将被删除或根据之前的状态 re-inserted 。
在正常的 'state' 中,单元格展开时画外音效果很好。当用户点击按钮并删除第一部分中的行时,画外音中断。如果我从上到下浏览,一切正常。相反,当您向上滚动时,vo 会读取屏幕上可见的单元格,但会读取第一部分的 header,然后再读取其下方的单元格。
插入和删除非常简单:
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
非常感谢您的帮助,我尝试了不同的解决方案,但 none 都有效。真是头疼啊!
如果您需要更多信息来解决此问题,请告诉我。 谢谢。
通过在第一部分中始终保留一行来解决此问题。
tableView.performBatchUpdates({
tableView.deleteRows(at: [indexPath], with: .fade)
tableView.insertRows(at: [indexPath], with: .fade)
}, completion: nil)
但是当变量 isExpanded 为 false 时,第一部分中的行高设置为 0 而不是自动设置。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 {
return isExpanded ? UITableView.automaticDimension : 0
}
return UITableView.automaticDimension
}