Настоящее модальное fullscreem SwiftUI - PullRequest
1 голос
/ 20 сентября 2019

как я могу представить модал, который будет занимать полноэкранный режим и не может быть отклонен, проведя его вниз?В настоящее время я использую .sheet для представления модального, который является недопустимым.

Я не заметил каких-либо бета-изменений в Xcode, которые бы изменяли это поведение.

Любая помощь будет принята:)

1 Ответ

1 голос
/ 21 сентября 2019

SwiftUI 1.0

Я не уверен, что это то, с чем вы хотели бы пойти, но возможно создать свой собственный модальный экран, используя ZStack и переменную состояния для управления скрытием / отображениемit.

Код

struct CustomModalPopups: View {
    @State private var showingModal = false

    var body: some View {
        ZStack {
            VStack(spacing: 20) {
                Text("Custom Popup").font(.largeTitle)

                Text("Introduction").font(.title).foregroundColor(.gray)

                Text("You can create your own modal popup with the use of a ZStack and a State variable.")
                    .frame(maxWidth: .infinity)
                    .padding().font(.title).layoutPriority(1)
                    .background(Color.orange).foregroundColor(Color.white)

                Button(action: {
                    self.showingModal = true
                }) {
                    Text("Show popup")
                }
                Spacer()
            }

            // The Custom Popup is on top of the screen
            if $showingModal.wrappedValue {
                // But it will not show unless this variable is true
                ZStack {
                    Color.black.opacity(0.4)
                        .edgesIgnoringSafeArea(.vertical)
                    // This VStack is the popup
                    VStack(spacing: 20) {
                        Text("Popup")
                            .bold().padding()
                            .frame(maxWidth: .infinity)
                            .background(Color.orange)
                            .foregroundColor(Color.white)
                        Spacer()
                        Button(action: {
                            self.showingModal = false
                        }) {
                            Text("Close")
                        }.padding()
                    }
                    .frame(width: 300, height: 200)
                    .background(Color.white)
                    .cornerRadius(20).shadow(radius: 20)
                }
            }
        }
    }
}

Пример

(отрывок из книги "SwiftUI Views") SwiftUI Views Book Excerpt Итак, ваше всплывающее окно маленькое, но вы можете настроить размеры, чтобы сделать его полноэкранным с помощью модификатора кадра, который находится на этом VStack.

...