我遇到了一些奇怪的行为,试图在被解雇后弹出一个简单的模式。
我在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的外观。请注意NavigationBar按钮。
现在,在我点击按钮并显示模式之后,然后使用UI调试器再次查看ContentView,所有相同的元素都就位,但是Button父视图稍微偏移了一点,如下所示:>
一旦我上下拖动列表,UI调试器将显示与第一个图像相同的视图层次。
有人知道这里发生了什么吗?
我在iPhone 11 Pro模拟器上使用Xcode 11.2.1和iOS 13,但在我的iPhone上也观察到了这一点。
谢谢!
答案 0 :(得分:2)
这确实是一个错误。有趣的是,在“拖动以消除”之后未发现该问题,因此这是一种“同步/异步”状态更改或类似的情况。
解决方法(暂时的Corse,几乎完全降低了可见性)
.navigationBarItems(trailing: Button(action: { self.displayModal = true }) {
Text("Add").padding([.leading, .vertical], 4)
})
答案 1 :(得分:0)
我遇到了同样的问题,对我来说,解决方法是在演示者上使用嵌入式样式的导航栏标题。
.navigationBarTitle(Text("The Title"), displayMode: .inline)
但是,如果您在ContentView上使用自定义强调色(例如.accentColor(Color.green)
),则此解决方法将不再起作用。
编辑:该错误似乎已在13.4中修复,并且不再需要任何解决方法。