You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:47:14