【发布时间】:2021-10-05 22:17:43
【问题描述】:
我正在尝试在需要列表的最新版本的 SWiftUI 中使用新的“拉取刷新”功能。将 VStack 包含在 List 中会导致 NavigationLink 仅工作一次。下面是没有 Pull To Refresh 部分的代码的简单版本。
在 stackoverflow 上有一个问题被问到 68144891,并且有一个对已知问题链接的引用,该链接将您带到一个未找到的页面 (https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-15-beta-release-notes)
复制步骤
- 点按“按我 1”或其中一项
- 点按“显示详细信息”
- 在顶部点按返回
- 再次点击“按我”将不会导航到下一个屏幕。点按时会出现灰屏
该应用无需 VStack 即可运行
struct ContentView: View {
var body: some View {
NavigationView {
List {
VStack { // commenting VStack works
Text("Options").font(.largeTitle).bold()
ForEach(1..<5, id:\.self) { counter in
NavigationLink(destination: SubView(counter: counter)) {
Text("Press Me \(counter)").font(.headline)
}
.buttonStyle(PlainButtonStyle())
}
}
}.listStyle(.grouped)
}
}
}
struct SubView: View {
var counter: Int
@State private var showDetails = false
var body: some View {
VStack(alignment: .leading) {
Button("Show details") {
showDetails.toggle()
}
if showDetails {
Text("Clicked")
.font(.largeTitle)
}
}
}
}
任何帮助表示赞赏
非常感谢!
【问题讨论】:
-
为什么要在列表中添加“vstack”? “vstack”将整个列表放在一个元素中,这不是您想要的。
-
我实际上有一个 LazyVStsck 在实际应用程序中带有固定的部分标题。仅作为示例,我使用 VStack 来说明错误。
-
通过将
VStack添加为List的根,您将所有内容设置为一行 - 我认为这不是您真正想要做的,所以只需删除VStack从顶部。顺便说一下,List 已经以惰性方式加载行了。
标签: swift swiftui swiftui-list swiftui-navigationlink swiftui-navigationview