ScrollView frame в SwiftUI


#1

Ребята, привет. Ситуация до банальности простейшая (а я начинающий), но никто не может решить этот вопрос даже на stackoverflow. Последняя надежда на вас! :slight_smile:
У меня внутри ScrollView расположен стек с картинками (ForEach). За картинку можно потянуть, и при отпускании она “летит” в другой массив (“на стол”). Так вот, из-за того, что картинки лежат в ScrollView, анимация перетягивания отображается лишь в рамках этого самого ScrollView, а за его рамками - пустота.
04
Если же ScrollView убрать, оставив лишь HStack, то всё идёт, как надо.

Вопрос: как пофиксить эту невиданную хрень?
Код выгдялит как-то так в общих чертах:
ScrollView(.horizontal) {
HStack(alignment: .center, spacing: 0) {
ForEach (player.playersCards, id: .self.id) { card in
Image(card.pic)
.resizable()
.frame(width: 93, height: 127)
.modifier(CardStyle())
.matchedGeometryEffect(id: card.id, in: dealingNamespace)
.offset(dragOffset[card.id])
.gesture(
DragGesture()


#2

Может проще создать дубликат во время перетаскивания ( основной делать прозрачным )
дубликат положить на основной слой и перетаскивать
Как только отпускаем - создается новый на столе и копия уничтожается


#3

Интересная мысль! Завтра попробую. Спасибо.


#4
ScrollView(.horizontal) {
    ...
}
.frame(height: UIScreen.main.bounds.height)

не?

Размер родительского фрейма в иерархии определяется дочерними элементами, поэтому у вас высота скроллвью равна дочерней высоте. Для решения достаточно принудительно определить высоту нужного фрейма. Код не проверял, но должно работать.

ПС: если у вас применяется несколько ориентаций, то при переворачивание с UIScreen.main.bounds.height естественно всё поломается. В таком случае высоту (если на весь экран надо) надо брать из GeometryReader.

ППС: скиньте ссылку на вопрос на стэке - просто интересно как вы задали вопрос, ведь ситуация вроде плёвая