Jon*_*han 10 user-interface ios swiftui
我面临着一种奇怪的行为,看起来确实像 SwiftUI bug。
当我打开应用程序并.sheet重新打开它时,来自父级的所有内容都会有一个点击偏移量。这很难解释(英语不是我的母语)所以这是一个非常简单的例子:
struct ContentView: View {
@State private var isOpen = false
var body: some View {
Button(action: {
isOpen.toggle()
}, label: {
Text("Open sheet")
.foregroundColor(.white)
.padding()
.background(.blue)
})
.sheet(isPresented: $isOpen, content: {
Text("Sheet content")
})
}
}
Run Code Online (Sandbox Code Playgroud)
要重现该问题,请按照下列步骤操作:
Open sheet:工作表按预期打开。有人也见过这个错误吗?我做错了什么吗?
其他注意事项:
.fullScreenCover代替.sheet,则不会出现该错误。.sheets打开的错误。编辑:
我尝试了两种解决方法,但都不起作用:
Button到外部视图中。Button仅替换为Text并添加.onTapGesture{ ... }修饰符以切换isOpen@State 属性。编辑2:
经过几个小时的尝试,我可以找到一些有趣的东西:如果在工作表内容中,我添加一个按钮来关闭工作表,则错误不会再出现。但是,如果我用手指关闭该工作表(从上到下拖动),它仍然会出现。
这是修改后的代码:
struct ContentView: View {
@State private var isOpen = false
var body: some View {
Button(action: {
isOpen.toggle()
}, label: {
Text("Open sheet")
.foregroundColor(.white)
.padding()
.background(.blue)
})
.sheet(isPresented: $isOpen, content: {
SheetContent()
})
}
}
struct SheetContent: View {
@Environment(\.dismiss) var dismiss
var body: some View {
Button(action: { dismiss() }, label: {
Text("Dismiss sheet")
})
}
}
Run Code Online (Sandbox Code Playgroud)
看起来好像有什么东西可以调用(或不调用)@Environment(\.dismiss) var dismiss.
目前的状态在几天前要好一些,因为只有当用户通过向下拖动关闭工作表时才会出现该错误。但还是有问题。
有没有一种方法可以dismiss()在通过向下拖动关闭工作表时以编程方式调用?
小智 0
我面临着完全相同的问题。我已向 Apple 提交了错误报告。作为解决方法,我手动添加关闭按钮并使用.interactiveDismissDisabled()阻止用户向下滑动以关闭。这并不理想,但重要的是我的主页上的按钮按应有的方式工作......