Как сделать модал недопустимым в SwiftUI - PullRequest
1 голос
/ 12 февраля 2020

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

Если пользователь потянет лист вниз, его необходимо снова переместить.

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

Как мы можем предотвратить отклонение модели с помощью раскрывающегося списка.

struct ModalView : View {

    @Environment(\.presentationMode) var presentationMode

    var body: some View {

        Rectangle()
            .fill(Color.orange)
            .frame(width: 400, height: 650)
            .overlay(
                VStack{
                    Button(action: {
                        self.presentationMode.wrappedValue.dismiss()
                    }) {
                        HStack {
                            Image(systemName: "chevron.left")
                            Text("Dismiss")
                        }.padding(10.0)
                        .overlay(
                            RoundedRectangle(cornerRadius: 10.0)
                                .stroke(lineWidth: 2.0)
                        )
                    }.accentColor(.white)
                })
            .border(Color.blue)
            .gesture( DragGesture())
    }
}

ContentView

struct ContentView: View {

    //MARK: Properties
    //isPresented:- Present's a Welcome Screen in the form of cards.
    @State private var isPresented = true
    var body: some View {

        VStack{
            DashboardView()
                .sheet(isPresented: $isPresented){
                    //IntroductionView(isPresentingSheet: self.$isPresented)
                    ModalView()
            }
        }
    }
}

DashboardView

struct DashboardView: View {

    var body: some View {
        Text("Hello SwiftUI")
    }
}

1 Ответ

1 голос
/ 12 февраля 2020

Вы можете попробовать это решение:

struct ModalWrapper: View {

    var body: some View {
        ModalView().highPriorityGesture(DragGesture())
    }

}

struct ModalView : View {

    @Environment(\.presentationMode) var presentationMode

    var body: some View {

        Rectangle()
            .fill(Color.orange)
            .frame(width: 400, height: 650)
            .overlay(
                VStack{
                    Button(action: {
                        self.presentationMode.wrappedValue.dismiss()
                    }) {
                        HStack {
                            Image(systemName: "chevron.left")
                            Text("Dismiss")
                        }.padding(10.0)
                        .overlay(
                            RoundedRectangle(cornerRadius: 10.0)
                                .stroke(lineWidth: 2.0)
                        )
                    }.accentColor(.white)
                })
            .border(Color.blue)
            .highPriorityGesture(DragGesture())
    }
}

struct ContentView: View {

    //MARK: Properties
    //isPresented:- Present's a Welcome Screen in the form of cards.
    @State private var isPresented = true
    var body: some View {

        VStack{
            DashboardView()
                .sheet(isPresented: $isPresented){
                    //IntroductionView(isPresentingSheet: self.$isPresented)
                    ModalWrapper()
            }
        }
    }
}

struct DashboardView: View {

    var body: some View {
        Text("Hello SwiftUI")
    }

}

Здесь я добавил ModalWrapper для переноса модального представления. Или же вам придется добавить highPriorityGesture(DragGesture()) ко всем подпредставлениям ModalView. Лучше сохранить один вид оболочки.

Надеюсь, это поможет вам.

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