SwiftUI - не может перетащить вид за пределы ScrollView - PullRequest
1 голос
/ 27 февраля 2020

Вот очень упрощенная версия моего макета. У меня есть текстовое представление, которое я могу перетаскивать ...

struct DragView: View {
    var text:String

    @State var dragAmt = CGSize.zero

    var body: some View {
        Text(text)
            .padding(15)
            .background(Color.orange)
            .cornerRadius(20)
            .padding(5)
            .frame(width: 150, height: 60, alignment: .leading)
            .offset(dragAmt)
            .gesture(
                DragGesture(coordinateSpace: .global)
                    .onChanged {
                        self.dragAmt = CGSize(width: $0.translation.width, height: $0.translation.height)
                }
                .onEnded {_ in
                    self.dragAmt = CGSize.zero
            })
    }
}

И затем я упорядочиваю эти виды следующим образом:

struct ContentView: View {
    var body: some View {
        HStack {
            ScrollView {
                VStack {
                    DragView(text: "hi")
                    DragView(text: "hi")
                    DragView(text: "hi")
                }
            }
            Divider()
            VStack {
                DragView(text: "hi")
                DragView(text: "hi")
                DragView(text: "hi")
            }
        }
    }
}

Виды, которых нет ScrollView работает, как и ожидалось, и я могу перетаскивать их по всему экрану. Виды, которые есть в ScrollView, однако, исчезнут, если вывести их за пределы ScrollView.

Почему это происходит? Есть ли способ, позволяющий перетаскивать эти виды за пределы ScrollView?

1 Ответ

0 голосов
/ 27 февраля 2020

Почему это происходит?

Вы перетаскиваете, просто не видите его, потому что ScrollView обрезает его представление содержимого. Стеки не по умолчанию. Если вы добавите .clipped() для нижнего VStack, вы увидите то же самое.

Можно ли как-нибудь разрешить перетаскивание этих видов за пределы ScrollView?

Возможно, решение использует ZStack. Скажем, при перетаскивании вы скрываете один вид в ScrollView и отображаете тот же самый внешний вид ScrollView в том же глобальном местоположении, так что визуально он будет вести себя так же, как при перетаскивании оригинала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...