[英]SwiftUI: Button in NavigationBar won't fire after modal dismissal
我遇到了一些奇怪的行为,试图在它被解雇后弹出一个简单的模式。
我在 NavigationBar 中有一个 Add 按钮,它会弹出一个模式。 模态有一个可以关闭它的按钮,它可以工作。 但是,在与屏幕上的其他内容交互之前,我无法再次与 NavigationBar 中的添加按钮交互,例如滚动下面的列表。
我还在列表本身中放置了另一个添加按钮,只是为了踢球,它总是有效的。
这是主视图的代码:
import SwiftUI
struct ContentView: View {
@State var displayModal: Bool = false
var body: some View {
NavigationView {
List {
Text("Hello again.")
Button(action: { self.displayModal = true }) {
Text("Add")
}
}
.sheet(isPresented: $displayModal) {
Modal(isPresented: self.$displayModal)
}
.navigationBarTitle("The Title")
.navigationBarItems(trailing: Button(action: { self.displayModal = true }) {
Text("Add")
})
}
}
}
为了完整起见,模态:
import SwiftUI
struct Modal: View {
@Binding var isPresented: Bool
var body: some View {
VStack {
HStack {
Button(action: {
self.isPresented = false
}) {
Text("Cancel")
}
.padding()
Spacer()
}
Text("I am the modal")
Spacer()
}
}
}
我唯一能想到的是一些不可见的东西阻止我使用 NavigationBar 按钮。 所以我启动了 UI 调试器,这就是 ContentView 的样子。 请注意导航栏按钮。
现在,在我点击按钮并显示模式后,然后使用 UI Debugger 再次查看 ContentView,所有相同的元素都在原位,但 Button 父视图偏移了一点,如下所示:
上下拖动列表后,UI 调试器会显示与第一个图像相同的视图层次结构。
有谁知道这里发生了什么?
我在 iPhone 11 Pro 模拟器上使用 Xcode 11.2.1 和 iOS 13,但也在我的 iPhone 上观察到了这一点。
这真的是一个错误。 有趣的是,在“拖动关闭”之后没有观察到问题,所以它是一种“同步/异步”state 变化之类的。
解决方法(当然是暂时的,几乎完全降低了能见度)
.navigationBarItems(trailing: Button(action: { self.displayModal = true }) {
Text("Add").padding([.leading, .vertical], 4)
})
我遇到了同样的问题,对我来说,解决方法是在演示者上使用内联样式的导航栏标题。
.navigationBarTitle(Text("The Title"), displayMode: .inline)
但是,如果您在 ContentView 上使用自定义强调色(如.accentColor(Color.green)
),则此解决方法不再有效。
编辑:该错误似乎已在 13.4 中修复,不再需要解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.