Я пытаюсь реализовать пользовательский интерфейс в стиле ActionSheet
( как этот ) с реакции-навигацией v.5 с использованием модального режима.
Снимок экрана - это то, что я имею до сих пор с несколькими изменениями стиля в файле example/ModalPresentationStack.tsx
. В основном только что добавил position: 'absolute', bottom: 0
к cardStyle
. (Sidenote: Я также пытался flex: null
, ожидая, что он упадет до высоты содержимого экрана, но он просто сворачивается без высоты.)
![enter image description here](https://i.stack.imgur.com/SqvgZ.png)
Проблема
Это очень близко к тому, что я ожидал бы от ActionSheet
пользовательского интерфейса. Осталось только перетащить и закрыть модал сверху (обычно с горизонтальным рулем вверху модала).
Из do c я понимаю, что есть gestureResponseDistance
, который позволяет нам настраивать, как далеко от верхней части экрана мы можем перетаскивать и перемещаться назад (закрывая ActionSheet
), но так как я хочу, чтобы высота модала была динамической c в соответствии с содержимым, я Я ищу способ заставить gestureResponseDistance
уважать высоту модала.
Идея
У меня есть идея добавить руль и обернуть его PanGestureHandler
и получить его вызовите pop()
при перетаскивании, но это кажется слишком тривиальным для реализации, и я не вижу никаких способов связать жест перетаскивания с навигационной анимацией.
ИМХО как-то я считаю, что расположение области обработки жестов навигации должно быть относительно самой карты экрана, чтобы экранную карту всегда можно было перетаскивать и закрывать с того места, где она находится, а не относительно экрана (т. е. расстояние X от верхней части экрана).
Копаясь в коде, я не уверен, что такое поведение может быть достигнуто простым перемещением <PanGestureHandler />
внутрь карты <Animated.View />
. ( код )