我正在尝试展示VStack中某个项目的图纸。以下代码在iOS 13.7上有效,但在iOS 14上无效:

import SwiftUI

struct ListRow: View {
    @State var showingSheet: Bool = false
    var body: some View {
        Button(action: {
            self.showingSheet = true
        }) {
            Text("Tap me")
        }.sheet(isPresented: self.$showingSheet, content: {
            NavigationView {
                Text("Hello")
            }
        })
    }
}

struct ListRow_Previews: PreviewProvider {
    static var previews: some View {
        ListRow()
    }
}



struct ContentView: View {
    @State private var showingModal: Bool = false
    var body: some View {
        NavigationView{
            VStack {
                ForEach (0..<10) {_ in
                    ListRow().padding()
                }
            }.navigationBarItems(leading: Button(action: {
                self.showingModal = true
            }, label: {
                Text("TAP")
            })).sheet(isPresented: self.$showingModal, content: {
                Text("Testing main modal")
            })

        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
但是,当我用List替换VStack时,它似乎可以工作。
这是预期的行为还是iOS 14上SwiftUI中的错误?我究竟做错了什么?
谢谢
托比亚斯·提姆(Tobias Timpe)

最佳答案

我认为问题是在同一 View 上两次出现.sheet()
由于VStack是非动态的,因此我希望将.sheetListRowVStack应用于幕后的同一结构,就像您在上层调用两次一样:

TextView("Foo")
.sheet(isPresented: $showA) { Text("A") }
.sheet(isPresented: $showB) { Text("B") } // Does not work, only one sheet is allowed
因此,要么只显示一张工作表,要么在工作表中具有显示“Hello”或“Testing main modal”的逻辑,或者使用List :)

关于SwiftUI:从VStack项目中显示工作表在iOS 14上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63987794/

10-09 16:01