【发布时间】:2021-02-22 01:04:44
【问题描述】:
我有一个奇怪的问题,我导航到EditView 并从ContentView 编辑状态变量。之后我用presentation.wrappedValue.dismiss() 解雇EditView。问题是,一旦视图被关闭,它就会再次出现。
我使用的是 XCode 12.4,我的 iOS 部署目标设置为 14.4
观察:
-
如果未编辑值,
EditView不会重新出现 - 从
ContentView树中删除更改后的值Text("Value: \(title)")>>Text("Value")可以解决问题,但这显然不是解决方案。 - 将
NavigationLink从.toolbar移出,例如
VStack {
Text("Value: \(title)")
NavigationLink(destination: EditView(title: $title)){
Text("Edit")
}
}
也解决了这个问题,但这似乎是一个 hack。此外,我想继续使用.toolbar,因为我喜欢.navigationTitle 动画,如果我有一个没有工具栏的导航标题,我就不能在屏幕右上角有一个按钮。
这是完整的代码:
import SwiftUI
struct ContentView: View {
@State var title: String = "Title"
@State var isActive: Bool = false
var body: some View {
NavigationView {
Text("Value: \(title)")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
NavigationLink(destination: EditView(title: $title, isActive: $isActive), isActive: $isActive){
Text("Edit")
}
}
}
}
}
}
struct EditView: View {
@Environment(\.presentationMode) var presentation
@Binding var title: String
@Binding var isActive: Bool
var body: some View {
Button(action: {
title = "\(Date().timeIntervalSince1970)"
// presentation.wrappedValue.dismiss()
isActive = false
}){
Text("Done")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
据我所知,这是一个 .toolbar 错误,如果结果是这样,我会将其报告给 Apple,但与此同时,是否有人对此有更好的解决方案和/或解释?
干杯!
编辑:
我用isActive 的值更新了代码NavigationLink。当这样写时它不起作用,但是取消注释注释掉的行使它起作用。但这很 hacky。
【问题讨论】:
标签: binding swiftui swiftui-navigationlink