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

SwiftUI macOS Inspector宽度恢复及理想宽度功能失效求助

SwiftUI Inspector 宽度记忆与双击功能失效问题解决

问题现象

  • 用户调整的Inspector宽度无法在应用重启后恢复,每次启动都以最小宽度打开
  • 双击Inspector分隔线无法切换到设置的ideal宽度(300)
  • 首次启动无历史宽度时,未自动使用ideal宽度,而是直接用最小宽度

已在macOS 15.5(Xcode 16.4)、macOS 26版本的调试/发布模式测试,排除Xcode运行环境影响。

临时解决方案

由于当前系统SwiftUI Inspector的自动记忆和双击功能存在bug,可通过以下手动实现的方式规避:

1. 手动保存与恢复宽度

使用UserDefaults存储用户调整后的宽度,启动时读取并设置初始值;

2. 手动实现双击分隔线切换理想宽度

添加双击手势监听,触发时将Inspector宽度切换为预设的理想值。

修改后的示例代码:

struct ContentView: View {
    @State private var showInspector = true
    @State private var inspectorWidth: CGFloat?
    
    private let savedWidthKey = "InspectorSavedWidth"
    private var initialWidth: CGFloat? {
        UserDefaults.standard.object(forKey: savedWidthKey) as? CGFloat
    }
    
    var body: some View {
        NavigationSplitView {
            Color.yellow
        } detail: {
            Color.mint
        }
        .inspector(isPresented: $showInspector) {
            Color.pink
                .inspectorColumnWidth(
                    min: 200,
                    ideal: inspectorWidth ?? 300,
                    max: 400
                )
                .onChange(of: inspectorWidth) { _, newValue in
                    if let newValue = newValue {
                        UserDefaults.standard.set(newValue, forKey: savedWidthKey)
                    }
                }
                .gesture(
                    TapGesture(count: 2)
                        .onEnded {
                            inspectorWidth = inspectorWidth == 300 ? initialWidth ?? 200 : 300
                        }
                )
        }
        .onAppear {
            inspectorWidth = initialWidth
        }
    }
}

说明

  • 该方案通过手动管理宽度存储和手势监听,替代系统失效的自动功能
  • 若后续系统更新修复了Inspector的原生问题,可移除这些手动逻辑,恢复使用原生的inspectorColumnWidth配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:42:05