Как включить VoiceOver для просмотра содержимого веб-страниц в tableview

Обычно VoiceOver правильно читает веб-содержимое, загруженное с помощью WKWebView, и можно читать кнопки и ссылки.

Однако когда я добавил WKWebView в UITableViewCell и отобразил в UITableVIew, VoiceOver не смог его распознать.

Согласно документу tableview от Apple, чтобы каждый контент на UITableViewCell распознавался VoiceOver отдельно, необходимо установить isAccessibilityElement ячейки в false и установить isAccessibilityElement of view, чтобы он распознавался как истинный.

но если для isAccesibilityElement ofWKWebView установлено значение true, само представление сфокусировано, и мы не можем распознать внутреннее веб-содержимое.

Кроме того, когда VoiceOver был включен в первый раз после загрузки веб-содержимого, он проявлял странное поведение: веб-содержимое можно было распознать.

Я заподозрил проблему с VoiceOver синхронизацией распознавания контента, попробовал запустить

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)

or

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil)

после загрузки веб-контента, но не получил хорошего результата.

Есть ли хороший способ обрабатывать содержимое wkwebview с tableView по VoiceOver?


person mrqb335    schedule 16.11.2017    source источник
comment
Включена ли доступность для UITableViewCell и WKWebview? Возможно, вам потребуется установить yourTableView.isAccessibilityElement = true yourWebView.isAccessibilityElement = true   -  person Nagarjun    schedule 16.11.2017
comment
Нет, это не так. Я ссылаюсь на этот документ и установите isAccessibilityElement = false для ячейки, чтобы установить доступность для отдельных элементов в ячейке. Кроме того, если для isAccessibilityElement WKWebView установлено значение true, фокусируется сам WebView, а не сам веб-контент. Это нежелательный результат.   -  person mrqb335    schedule 16.11.2017
comment
Кстати, я попытался установить isAccessibilityElement ячейки и веб-просмотра в значение true, но это не сработало, как ожидалось.   -  person mrqb335    schedule 16.11.2017


Ответы (1)


Итак, я объясню поведение, которое вы наблюдаете. По сути, VoiceOver будет фокусировать только первый элемент доступности в дереве. Таким образом, любое представление, являющееся элементом доступности, не будет иметь сфокусированных дочерних элементов, являющихся элементами доступности.

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

Типичная разметка для веб-просмотра будет заключаться в том, чтобы НИЧЕГО не было установлено в качестве элемента доступности, и позволить WebView определять, какие элементы внутри доступны. WKWebView должен позаботиться о том, чтобы сообщать о HTML-содержимом как о собственных элементах доступности для вас. Выполнение чего-либо еще может испортить то, что собирается делать WKWebView. ОДНАКО, если у вас есть несколько веб-просмотров в одном приложении, это может испортить ситуацию. В конечном счете, если бы это не сработало так, как я описал (просто оставив все в покое и пометив все как «не» элемент доступности), это будет ошибкой, но ошибкой, с которой вам придется иметь дело.

Решение THEN переопределяет протокол UIAccessibilityContainer для вашего веб-просмотра и предоставляет для него настраиваемую обратную связь. Не идеально, было бы больно. Более подробная информация поможет, но, по крайней мере, теперь вы можете понять немного больше о том, что происходит.

Другое простое решение: если контент в вашем веб-просмотре очень прост, вы можете установить для элемента доступности значение true и предоставить описание контента для всего веб-просмотра с помощью accessibilityLabel, accessibilityValue и accessibilityTraits. Просто убедитесь, что вы уловили всю информацию, и что любые действия по-прежнему актуальны!

person ChrisCM    schedule 17.11.2017
comment
Спасибо за ответ. У меня была аналогичная проблема, и ваш ответ был очень полезным. - person Rici; 07.12.2020
comment
Это было полезно. Спасибо! - person Revanth Kausikan; 31.05.2021