iOS VoiceOver чтение accessibilityIdentifier вместо accessibilityLabel - PullRequest
3 голосов
/ 15 апреля 2020

VoiceOver должен прочитать свойство accessibilityLabel любого элемента доступности на экране. У меня есть UIImageView с именем mediaImageView, приведенный ниже код устанавливает доступность для этого представления и вызывается в awakeFromNib в подклассе UITableViewCell.

Вместо чтения image, VoiceOver читает articleMediaCell_image, что является accessibilityIdentifier. Кто-нибудь может объяснить, почему это может происходить?

(тестирование на устройстве с iOS 13.3, проблема возникает независимо от того, установлены ли пользовательские действия)

    mediaImageView.isAccessibilityElement = true
    mediaImageView.accessibilityIdentifier = "articleMediaCell_image"
    mediaImageView.accessibilityLabel = "image"

    mediaImageView.accessibilityCustomActions = [
        UIAccessibilityCustomAction(
            name: "expand to fullscreen",
            target: self,
            selector: #selector(imageTapped)
        )
    ]

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Установите accessibilityTraits вашего mediaImageView на UIAccessibilityTraits.button.

mediaImageView.accessibilityTraits = UIAccessibilityTraits.button

2 голосов
/ 15 апреля 2020

Это происходит, поскольку вы установили черту (изображение) типа элемента управления (UIImage) в качестве значения для accessibilityLabel здесь:

mediaImageView.accessibilityLabel = "image"
/*
Won't work, because iOS already knows that this is an image from the element's traits.
Due to this, the redundant value will be ignored and the voiceover will fallback to reading the `accessibilityIdentifier`.
*/

Используйте любое значение ("Media" для пример) , который отличается от признака объекта, поскольку голос за кадром будет считывать значение вашей метки, как указано ниже («Media»), за которым следует признак («Image») типа элемента управления:

mediaImageView.accessibilityLabel = "media" /* This should work */

Выдержка из accessibilityLabel Документация Apple :

Обратите внимание, однако, что метка никогда не должна содержать тип элемента управления (например, «кнопка»), поскольку эта информация содержится в признаках, связанных с элементом доступности.

...