Представления за пределами суперпредставления недоступны для VoiceOver при панорамировании - PullRequest
0 голосов
/ 25 июня 2018

В моем приложении у меня есть некоторые элементы управления, которые являются подпредставлениями UIView, но их рамки находятся за пределами суперпредставления. Они видны зрячим пользователям, потому что clipsToBounds - это false. Для пользователей VoiceOver они могут выделить элемент управления, который находится в пределах его суперпредставления, а затем проведите пальцем вправо, чтобы выделить следующий элемент управления, который находится за пределами. Это работает, как ожидалось. Но если вместо этого они касаются экрана и перемещаются по экрану, VoiceOver никогда не выделяет элементы за пределами своих суперпредставлений. Как я могу гарантировать, что эти элементы будут доступны при панорамировании?

Я создал пример проекта, который сталкивается с этой проблемой. Здесь есть две кнопки, добавленные как подпредставления к серому UIView. Кнопка 0 находится в пределах своего суперпредставления, кнопка 1 расположена снаружи. Кнопка 0 доступна при панорамировании, кнопка 1 - нет.

enter image description here

1 Ответ

0 голосов
/ 14 ноября 2018

Похоже, что структура доступности использует UIView.point(inside:_, with:_), чтобы определить, является ли представление доступным через VoiceOver.

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

В этом конкретном случае у моего суперпредставления есть фоновое представление, которое рисуется за пределами суперпредставления, и представление, которое я хотел быть доступным для VoiceOver.находится внутри границ этого фонового представления.Итак, у меня есть:

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    return background.frame.contains(point)
}

Отрегулируйте в соответствии с вашим сценарием.

...