我注意到在使用iOS 13.3.1和更早版本的SwiftUI中,一个非常奇怪的行为,可能是错误的行为。为了演示这个非常简单的场景:
完整的示例代码:
import SwiftUI
struct ContentView: View {
@State var showingSheet: Bool = false
var body: some View {
NavigationView {
Text("ParentView")
.navigationBarItems(trailing: Button(action: { self.showingSheet = true }) { Text("Show") })
}.sheet(isPresented: $showingSheet) { SheetView() }
}
}
struct SheetView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Sheet content")
Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("Hide") }
}
}
}
要复制:
预期结果:工作表再次显示。
实际结果:“显示”按钮的点击目标已向底部移动了一些像素,导致该操作未触发。在View Hierarchy Debugger中也可以观察到这一点:
其他观察结果:
所以现在我在想:我是在犯一个错误,还是一个实际的SwiftUI错误?如果是这样,有没有简单的解决方法?我在SO中搜索了类似的问题,但没有遇到相同的问题。
编辑:同时,我将此文件作为“雷达反馈FB7560960”提交给了苹果公司。
编辑2:仍在13.4.1中发生。
答案 0 :(得分:2)
我不知道为什么,但是添加
@Environment(\.presentationMode) var presentationMode
contentView
似乎可以解决。