Как прокрутить UIStackView по горизонтали, когда VoiceOver смахивает? - PullRequest
1 голос
/ 21 января 2020

У меня есть горизонтальный UIStackView с несколькими кнопками внутри. Количество кнопок не является постоянным, а длина стека может превышать ширину экрана.

enter image description here

Я использую структуру UIScrollView - UIView - UIStackView справа выровнять, если длина меньше ширины экрана, и выровнять по левому краю, если длина превышает. enter image description here enter image description here

Когда VoiceOver включен, он только читает кнопки на экране.

Я пытался добавить все кнопки в accessibilityElements. VoiceOver может читать все кнопки, но не прокручивает представление стека, чтобы показать их. И когда проведите пальцем от элемента ниже стека, VoiceOver по-прежнему игнорирует кнопки не на экране. Таким образом, добавление в accessibilityElements не может решить эту проблему.

Кто-нибудь знает, как прокрутить представление стека, чтобы показать скрытые кнопки, когда пользователь проводит по экрану? Заранее спасибо.

1 Ответ

1 голос
/ 21 января 2020

Кто-нибудь знает, как прокручивать вид стека, чтобы показать скрытые кнопки, когда пользователь проводит экран?

Вставить вид стека в представление прокрутки , чтобы иметь возможность получить элементы за пределами экрана: вы можете сделать это с помощью Interface Builder или программно .

Вот моя конфигурация в XCode для перелистывания кнопок с VoiceOver внутри UIStackView: enter image description here enter image description here И наконец я получил следующий результат на своем устройстве: enter image description here Я не играл с выравниванием в UIStackView, но с этим обоснованием вы можете просмотр стека прокрутки, чтобы отображать скрытые кнопки, когда пользователь проводит по экрану .

⚠️ ⬛️◼️?¡️️ РЕДАКТИРОВАТЬ ▪️?◼️⬛️ 10 (февраль 2020: после добавления новых ограничений в исходный вопрос)

Выравнивание - моя основная потребность.

Как объяснено в моем комментарии ограничения макета являются решением для достижения у наша цель без использования выделенного UIView.

. Ниже подробно описывается конфигурация Interface Builder: enter image description here enter image description here и с несколькими строками кода следующим образом :

@IBOutlet weak var myScrollView: UIScrollView!
@IBOutlet weak var myStackView: UIStackView!

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let delta = myScrollView.frame.width - myStackView.frame.width
    let constant = (delta > 0.0) ? delta : 0.0

    myStackView.leadingAnchor.constraint(greaterThanOrEqualTo: myScrollView.contentLayoutGuide.leadingAnchor,
                                         constant: constant).isActive = true
}

... вы получите этот результат с 5 кнопками: enter image description here ... и правильное выравнивание сохраняется несколькими кнопками: enter image description here

Теперь вы можете прокручивать UIStackView по горизонтали, когда VoiceOver смахивает . ?

...