SwiftUI中Sheet内PKCanvasView触发关闭时工具消失的问题
问题:SwiftUI Sheet中PKCanvasView工具条关闭重开后消失
场景代码
调用Sheet展示绘图视图的代码:
... .sheet { DrawingView() }
承载PKCanvasView的DrawingView实现:
struct DrawingView: View { private var canvasView = PKCanvasView() @Environment(\.dismiss) var dismiss var body: some View { NavigationStack { GeometryReader { proxy in MyCanvas(canvasView: canvasView) } ... }
PKCanvasView的UIViewRepresentable包装实现:
struct MyCanvas: UIViewRepresentable { var canvasView: PKCanvasView @Binding var oldImage: UIImage? let picker = PKToolPicker() func makeUIView(context: Context) -> PKCanvasView { self.canvasView.tool = PKInkingTool(.pen, color: .black, width: 15) self.canvasView.becomeFirstResponder() return canvasView } func updateUIView(_ uiView: PKCanvasView, context: Context) { print(#function, uiView.drawing.strokes.count) picker.addObserver(canvasView) picker.setVisible(true, forFirstResponder: uiView) DispatchQueue.main.async { uiView.becomeFirstResponder() } } }
问题现象与推测
当前基础功能正常,但存在以下异常:
- 触发sheet滑动关闭操作时,PKCanvasView的工具条会自动消失
- 重新上滑打开sheet后,工具条依旧不可见,仅能使用最后一次选中的画笔进行绘画
推测核心原因是第一响应者丢失:SwiftUI在sheet滑动关闭过程中,会让PKCanvasView失去第一响应者身份,进而导致工具条被隐藏,逻辑类似sheet滑动关闭时键盘自动隐藏的行为。
内容的提问来源于stack exchange,提问作者thisIsTheFoxe
相关产品推荐
相关产品推荐

