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
相关产品推荐
相关产品推荐

