【发布时间】:2020-03-02 08:55:20
【问题描述】:
当您从导航栏项目内的按钮显示模式时,这是 SwiftUI 中的一个错误。 在下面的代码中,按钮 1 按预期工作,但按钮 2 只工作一次:
struct DetailView: View {
@Binding var isPresented: Bool
@Environment (\.presentationMode) var presentationMode
var body: some View {
NavigationView {
Text("OK")
.navigationBarTitle("Details")
.navigationBarItems(trailing: Button(action: {
self.isPresented = false
// or:
// self.presentationMode.wrappedValue.dismiss()
}) {
Text("Done").bold()
})
}
}
}
struct ContentView: View {
@State var showSheetView = false
var body: some View {
NavigationView {
Group {
Text("Master")
Button(action: { self.showSheetView.toggle() }) {
Text("Button 1")
}
}
.navigationBarTitle("Main")
.navigationBarItems(trailing: Button(action: {
self.showSheetView.toggle()
}) {
Text("Button 2").bold()
})
}.sheet(isPresented: $showSheetView) {
DetailView(isPresented: self.$showSheetView)
}
}
}
这个bug是去年年中的,现在还在Xcode 11.3.1 + iOS 13.3 Simulator和iOS 13.3.1 iPhone XS中。
这里有什么解决方法可以让按钮工作吗?
编辑:
- 似乎是点击区域向下某处,可以点击下面的按钮以显示模式。
对此的临时解决方案是使用内联导航栏模式:
.navigationBarTitle("Main", displayMode: .inline)
【问题讨论】:
-
一旦签入设备就可以工作了。
-
嗯,在设备上它第一次也可以正常工作,但是对于接下来的点击,您需要在按钮本身下方的某个地方非常绅士地按下(几乎长按),这是奇怪而不是预期的行为