Как исправить озвучку после удаления строки в TableView

У меня возникли проблемы с исправлением озвучки после удаления строки. структура такая:

У меня есть tableview с 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

Я был бы очень признателен за вашу помощь, я пробовал разные решения, но ни одно из них не работает. Это довольно большая головная боль!

Дайте мне знать, если вам нужна дополнительная информация, чтобы решить эту проблему. Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
277
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решил это, всегда сохраняя строку в первом разделе.

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
    }

Другие вопросы по теме