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

contextMenu激活时UIViewRepresentable视图消失如何解决

问题原因

触发contextMenu时UIViewRepresentable自定义视图消失,是两个常见兼容问题导致:

  • 自定义UIView没有配置自动适配父视图尺寸的规则,contextMenu激活生成预览时容器尺寸变化,内部UIView无法正常展示
  • SwiftUI默认对UIViewRepresentable类型视图的快照预览生成逻辑存在兼容问题
解决方案

两个方案任选其一即可解决问题:

方案1:修复UIView的布局适配逻辑(推荐)

修改TestView代码,给内部UIView添加自动适配规则,同时明确返回类型避免类型推断异常:

struct TestView: UIViewRepresentable {
    func makeUIView(context: Context) -> UIView {
        let view = UIView(frame: .zero)
        view.backgroundColor = .red
        // 配置自动跟随父视图调整宽高
        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        return view
    }
    func updateUIView(_ uiView: UIView, context: Context) {}
}

这个方案从根源解决布局适配问题,后续其他需要视图快照的场景(转场动画、拖拽预览等)也不会出现同类问题。

方案2:手动指定contextMenu预览内容

不需要修改TestView,直接在使用contextMenu时明确指定预览视图即可:

struct ContentView: View {
    var body: some View {
        TestView()
            .frame(width: 200, height: 200)
            .contextMenu {
                Text("Context Menu")
            } preview: {
                // 强制指定预览使用的视图
                TestView()
                    .frame(width: 200, height: 200)
            }
    }
}

内容的提问来源于stack exchange,提问作者Vyacheslav Burlakov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:57:01