我正在尝试将工作表表示形式的工作嵌套在ScrollView
内的多个视图中。
在没有ScrollView
的情况下,.sheet
修改器可以正常工作,但是当我将所有内容包装在滚动视图中时,该修改器仅触发一次。因此,在第一次点击时,工作表似乎正常,但是在将其关闭后无法再次触发它。我不确定这是SwiftUI
本身的错误还是在这里做的事情。
注意:如果我将.sheet
修饰符添加到ScrollView
本身,则一切正常。但是对于我的用例,.sheet
修饰符深深地嵌套在ScrollView
内的自定义视图中。
我正在使用Xcode Beta 5
没有ScrollView-有效
struct SheetWorks: View {
@State var showSheet = false
var strings = [
"Hello", "World", "!"
]
var body: some View {
HStack {
ForEach(strings) { string in
Button(action: {self.showSheet.toggle()}) {
Text(string)
}
.sheet(isPresented: self.$showSheet) {
Text("Here is the sheet")
}
}
}
.padding()
}
}
使用ScrollView-不起作用
struct SheetDoesntWork: View {
@State var showSheet = false
var strings = [
"Hello", "World", "!"
]
var body: some View {
ScrollView(.horizontal) {
HStack {
ForEach(strings) { string in
Button(action: {self.showSheet.toggle()}) {
Text(string)
}
.sheet(isPresented: self.$showSheet) {
Text("Here is the sheet")
}
}
}
.padding()
}
}
}
也许有人经历过类似的事情,或者可以指出正确的方向。我非常感谢您的帮助。
修改:此问题在Beta 6中仍然存在
答案 0 :(得分:2)
在这里查看我的答案:https://stackoverflow.com/a/57259687/554203
基本上,您应该只在循环外使用一个.sheet
并根据本地变量动态打开所需的视图。
var covers = coverData
var selectedTag = 0
Group {
ForEach(covers) { item in
Button(action: {
self.selectedTag = item.tag
self.isPresented.toggle()
}) {
CoverAttributes(
title: item.title,
alternativeTitle: alternativeTitle,
tapForMore: item.tapForMore,
color: item.color,
shadowColor: item.shadowColor)
}
}
}
.sheet(isPresented: self.$isPresented, content: {
Text("Destination View \(self.selectedTag)")
// Here you could use a switch statement on selectedTag if you want
})
答案 1 :(得分:0)
从Xcode 11.1 GM Seed
开始,我可以批准.sheet
修饰符现在可以在ScrollView
内正常工作。此外,现在也可以正确呈现多行Text
。