使用 SwiftUI 呈现多个模态表

Nic*_*vit 2 iphone ios swift swiftui

我正在尝试使用 .sheet 演示文稿将多个模态视图附加到 NavigationView。

我尝试将 .sheet 链接在一起只是为了发现当绑定变量更改时只能触发最后一个显示

有没有办法为多个模态做到这一点?

var body: some View {
NavigationView {
     ZStack(alignment: .leading) {
             MainView()
                }
                // present profile page
                .sheet(isPresented: self.$presentation.profile){
                    ProfilePage()
                }

                // present product page
                .sheet(isPresented: self.$presentProduct) {
                    SingleProductView()
                }

                //present login
                .sheet(isPresented: self.$showLogin) {
                    LoginView(showLogin:self.$showLogin)
                }

                //present cart
                .sheet(isPresented: self.$showCart) {
                    CartView()
                }

                // set title
                .navigationBarTitle("Title", displayMode: .inline)

                // set items
                .navigationBarItems(leading: (
                    NavigationBarLeadingItems()
                ),trailing: (
                    NavigationBarTrailingItems()
                    )
                )

Run Code Online (Sandbox Code Playgroud)

Kev*_*inP 5

在 SwiftUI 中对同一个 Element 多次调用同一个方法将始终只应用最后一个。

Text("Some Nice Text")
    .forgroundColor(.red)
    .forgroundColor(.blue)
Run Code Online (Sandbox Code Playgroud)

这将始终导致文本显示为蓝色而不是红色,即使您将其颜色设置为红色。.sheet 电话也是如此。最后一个 .sheet 调用会覆盖它的前辈。

有两种可能的解决方案:

您将 .sheet 调用放在不同的视图上。

ViewOne().sheet(...) { ... }
ViewSecond().sheet(...) { ... }
Run Code Online (Sandbox Code Playgroud)

您可以动态更改 .sheet 调用的内容:

View()
    .sheet(...) {
        if someState {
            return SheetViewOne()
        else {
            return SheetViewSecond()
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)