VoiceOver читает заголовок таблицы дважды и всегда добавляет слово «заголовок» - PullRequest
0 голосов
/ 21 ноября 2018

Вот мой код:

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, но он совсем не помогает.

1 Ответ

0 голосов
/ 06 июня 2019

Если вы хотите отобразить табличное представление с заголовками разделов, используя VoiceOver, никогда не произнося «заголовок», просто забудьте об этом: это тупик - в настоящее время нет решения , чтобы завершить этот вид проектирования табличного представления.

Наилучшим способом достижения технических целей является создание единого табличного представления, заголовки разделов которого представляют собой отдельные ячейки с другим внешним видом ⟹ Я указал «технический», поскольку функционально это определенно нене подходит или рекомендуется для пользователей VoiceOver.

Действительно, заголовки разделов являются важными маркерами, которые не только разграничивают определенные блоки информации, но и позволяют очень быстро перемещаться из одного раздела в другой благодаряротор.

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

Как выЯ потратил много времени, чтобы попытаться найти техническое решение для этогоoblem "но, даже если бы я нашел это (к сожалению, я не нашел) , я бы точно не реализовал это.

========== РЕДАКТИРОВАТЬ ==========

После вашего комментария (25.07.2019) , теперь я понимаю, что вашей проблемой является заголовок, который читается дважды ине воля удаления черты 'header'.

Я создал пустой проект, в котором реализовал фрагмент кода ниже, чтобы получить таблицу с заголовками, которые никогда не повторяются дважды:

class SimpleHeadersTableViewController: UITableViewController {

    override func numberOfSections(in tableView: UITableView) -> Int { return 4 }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 5 }

    override func tableView(_ tableView: UITableView,
                            viewForHeaderInSection section: Int) -> UIView? {

        let headerView = UIView(frame: CGRect(origin: CGPoint.zero,
                                              size: CGSize(width: tableView.frame.width,
                                                           height: 44)))

        let a11yHeader = UIAccessibilityElement(accessibilityContainer: headerView)
        a11yHeader.accessibilityFrameInContainerSpace = headerView.frame

        a11yHeader.isAccessibilityElement = true
        a11yHeader.accessibilityLabel = "Pending requests"
        a11yHeader.accessibilityTraits = .header

        headerView.accessibilityElements = [a11yHeader]

        return headerView
    }


    override func tableView(_ tableView: UITableView,
                            cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cellId",
                                                 for: indexPath)
        cell.textLabel?.text = String(indexPath.row)

        return cell
    }
}

Попробуйте это и адаптируйте к своему приложению.

Теперь VoiceOver считывает заголовок таблицы один раз и всегда добавляет слово «заголовок» .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...