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

如何让SwiftUI macOS App每次启动时固定初始窗口大小?

解决macOS SwiftUI App启动固定初始窗口尺寸的问题

问题核心是macOS默认的窗口状态自动恢复机制在作祟——系统会自动保存并恢复窗口上次关闭时的大小、位置,导致你设置的初始尺寸被覆盖。以下是有效的解决方法:

方法一:禁用窗口自动恢复(推荐)

直接关闭系统的窗口恢复功能,让App每次启动都使用你指定的默认尺寸。在WindowGroup中添加windowRestorationPolicy(.manual),配合defaultSize即可:

@main
struct YourAppName: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .defaultSize(width: 800, height: 600)
        .windowRestorationPolicy(.manual) // 禁用系统自动恢复窗口状态
    }
}

方法二:强制在视图加载后设置窗口尺寸

如果需要保留部分窗口恢复功能,可在ContentView的onAppear回调中强制设置窗口大小,覆盖系统恢复的状态:

struct ContentView: View {
    var body: some View {
        ScrollView {
            // 你的滚动内容
        }
        .onAppear {
            // 获取第一个窗口并设置尺寸
            if let mainWindow = NSApp.windows.first {
                mainWindow.setContentSize(NSSize(width: 800, height: 600))
            }
        }
    }
}

为什么你之前的方法无效?

  • AppDelegate设置尺寸:调用时机太晚,系统的窗口恢复机制会在之后覆盖你设置的尺寸。
  • WindowGroup.defaultSize:仅在窗口首次创建时生效,若系统恢复了之前的窗口状态,该默认值会被忽略。
  • ContentView.frame:仅限制视图的最小尺寸,不会改变窗口本身的大小,窗口仍会遵循系统恢复的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:47:01