我遇到了一些奇怪的行为,试图在它被解雇后弹出一个简单的模式。
我在 NavigationBar 中有一个弹出模态的添加按钮。模态有一个按钮可以关闭它,它可以工作。但是,在与屏幕上的其他内容(例如滚动下面的列表)进行交互之前,我无法再次与 NavigationBar 中的“添加”按钮进行交互。
我还在列表本身中放置了另一个添加按钮,只是为了踢球,它总是有效。
这是主 View 的代码:
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 的样子。请注意 NavigationBar 按钮。
现在,在我点击按钮并显示模态后,然后使用 UI 调试器再次查看 ContentView,所有相同的元素都已就位,但 Button 父 View 有点偏移,如下所示:
一旦我上下拖动列表,UI 调试器就会显示与第一张图像相同的 View 层次结构。
有谁知道这里发生了什么?
我在 iPhone 11 Pro 模拟器上使用 Xcode 11.2.1 和 iOS 13,但也在我的 iPhone 上观察到这一点。
谢谢!
最佳答案
这真的是一个错误。有趣的是,在“拖动以关闭”之后没有观察到问题,所以它是一种“同步/异步”状态改变或其他东西。
解决方法 (corse的临时,几乎完全降低能见度)
.navigationBarItems(trailing: Button(action: { self.displayModal = true }) {
Text("Add").padding([.leading, .vertical], 4)
})
关于ios - SwiftUI:模式关闭后导航栏中的按钮不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58910255/