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

Xcode中重建SwiftUI应用时如何清除窗口大小的用户默认值?

解决方案

方案1:应用启动时自动清除窗口尺寸记录

既然Cmd+R是重启应用,那我们可以在应用启动阶段就把旧的窗口尺寸记录删掉,这样新启动的应用就会用默认窗口尺寸打开。

在SwiftUI的App结构体中,你可以在初始化方法里执行清除逻辑:

@main
struct YourApp: App {
    init() {
        // 筛选所有包含"NSWindow Frame"的UserDefaults键
        let windowFrameKeys = UserDefaults.standard.dictionaryRepresentation().keys.filter {
            $0.contains("NSWindow Frame")
        }
        // 批量删除这些键
        windowFrameKeys.forEach {
            UserDefaults.standard.removeObject(forKey: $0)
        }
        // 同步修改确保立即生效
        UserDefaults.standard.synchronize()
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

如果担心初始化时机过早,也可以用.task修饰符绑定到窗口,确保在界面加载前执行:

@main
struct YourApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .task {
                    let windowFrameKeys = UserDefaults.standard.dictionaryRepresentation().keys.filter {
                        $0.contains("NSWindow Frame")
                    }
                    windowFrameKeys.forEach {
                        UserDefaults.standard.removeObject(forKey: $0)
                    }
                    UserDefaults.standard.synchronize()
                }
        }
    }
}

方案2:通过Xcode预执行脚本实现

如果你不想修改代码,还可以在Xcode的运行配置里添加预执行脚本,每次Cmd+R前自动清除旧记录:

  1. 打开Xcode,点击顶部菜单栏Product > Scheme > Edit Scheme
  2. 左侧选择Run,切换到Pre-actions标签
  3. 点击+号,选择New Run Script Action
  4. 在脚本框中输入以下内容(替换com.yourcompany.yourapp为你的应用Bundle ID):
# 删除所有包含"NSWindow Frame"的键
defaults delete com.yourcompany.yourapp $(defaults read com.yourcompany.yourapp | grep "NSWindow Frame" | awk '{print $1}' | tr -d '"')

如果需要清除所有UserDefaults数据(谨慎使用),可以用更简单的脚本:

rm ~/Library/Preferences/com.yourcompany.yourapp.plist

这样每次按Cmd+R时,Xcode会先执行脚本清除旧记录,再启动应用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:25:32