Как я могу отклонить этот пользовательский модал, используя привязки? - PullRequest
1 голос
/ 24 марта 2020

Я не могу понять, как отклонить представление, которое отображается внутри его родителей, через @State var showingCardModal = false. Вот код для моего ContentView:

import SwiftUI

struct ContentView: View {

    @State var showingCardModal = false

    var body: some View {

        ZStack {
            Button(action: {
                withAnimation {
                self.showingCardModal.toggle()
                }
            }) {
                Text("Show").font(.headline)
            }
            .frame(width: 270, height: 64)
            .background(Color.secondary).foregroundColor(.white)
            .cornerRadius(12)
            if showingCardModal {
                CardModal()
                    .transition(AnyTransition.scale.combined(with: .opacity).animation(.easeIn(duration: 0.75)))
            }
        }
    }
}

И для CardModal внутри него:

import SwiftUI

struct CardModal: View {

    //@Binding var isPresented: Bool

    var body: some View {

        ZStack{
            Color(.secondarySystemBackground).edgesIgnoringSafeArea(.all)
            VStack{
                Spacer().frame(height:30)
                Text("Today, 20 March").font(.title)
                Spacer()
                }
            CarouselView(itemHeight: 420, views: [
                SingleCard(name: "Card 1", contentOpacity: 1.0),
                SingleCard(name: "Card 2", contentOpacity: 1.0),
                SingleCard(name: "Card 3", contentOpacity: 1.0),
                SingleCard(name: "Card 4", contentOpacity: 1.0),
                SingleCard(name: "Card 5", contentOpacity: 1.0),
                SingleCard(name: "Card 6", contentOpacity: 1.0),
                SingleCard(name: "Card 7", contentOpacity: 1.0),
                ])
            VStack {
                Spacer()
                Button(action:{}) {
                    Text("Done").font(.headline).foregroundColor(.purple)
                    }
                    .frame(width: 300, height: 48)
                    .background(Color.gray.opacity(0.25))
                    .cornerRadius(12)
                Spacer().frame(height: 20)
            }
        }
    }
}

Я пытаюсь воспроизвести что-то подобное в приложении Health, когда модальные слайды снизу для симптомов менструального цикла. Модал на весь экран и закрывается кнопкой.

1 Ответ

1 голос
/ 24 марта 2020

Это может быть так ...

struct CardModal: View {
    @Binding var isPresented: Bool
...

    Button(action:{ self.isPresented = false }) {

и в ContentView

if showingCardModal {
    CardModal(isPresented: self.$showingCardModal)

и в PreviewProvider

CardModal(isPresented: .constant(true))
...