act-navigation v5: Попытка реализовать пользовательский интерфейс `ActionSheet` с помощью` mode: modal` - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь реализовать пользовательский интерфейс в стиле ActionSheet ( как этот ) с реакции-навигацией v.5 с использованием модального режима.

Снимок экрана - это то, что я имею до сих пор с несколькими изменениями стиля в файле example/ModalPresentationStack.tsx. В основном только что добавил position: 'absolute', bottom: 0 к cardStyle. (Sidenote: Я также пытался flex: null, ожидая, что он упадет до высоты содержимого экрана, но он просто сворачивается без высоты.)

enter image description here

Проблема

Это очень близко к тому, что я ожидал бы от ActionSheet пользовательского интерфейса. Осталось только перетащить и закрыть модал сверху (обычно с горизонтальным рулем вверху модала).

Из do c я понимаю, что есть gestureResponseDistance, который позволяет нам настраивать, как далеко от верхней части экрана мы можем перетаскивать и перемещаться назад (закрывая ActionSheet), но так как я хочу, чтобы высота модала была динамической c в соответствии с содержимым, я Я ищу способ заставить gestureResponseDistance уважать высоту модала.

Идея

У меня есть идея добавить руль и обернуть его PanGestureHandler и получить его вызовите pop() при перетаскивании, но это кажется слишком тривиальным для реализации, и я не вижу никаких способов связать жест перетаскивания с навигационной анимацией.

enter image description here

ИМХО как-то я считаю, что расположение области обработки жестов навигации должно быть относительно самой карты экрана, чтобы экранную карту всегда можно было перетаскивать и закрывать с того места, где она находится, а не относительно экрана (т. е. расстояние X от верхней части экрана).

Копаясь в коде, я не уверен, что такое поведение может быть достигнуто простым перемещением <PanGestureHandler /> внутрь карты <Animated.View />. ( код )

...