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

