我正在使用SwiftUI开发一个新的macOS应用程序,但是无法确定如何定义窗口大小。在AppDelegate中,窗口大小定义如下:
// --- AppDelegate.swift ---
import Cocoa
import SwiftUI
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var window: NSWindow!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.center()
window.setFrameAutosaveName("Main Window")
window.contentView = NSHostingView(rootView: ContentView())
window.makeKeyAndOrderFront(nil)
}
}
ContentView的定义如下:
// --- ContentView.swift ---
import SwiftUI
struct ContentView : View {
var body: some View {
VStack {
Spacer()
Text("Top Text")
Spacer()
Text("Bottom Text")
Spacer()
}
}
}
当我构建并运行该应用程序时,窗口出现了,但它的大小不正确。它的大小大约是两个文本标签的大小,并不是在AppDelegate中定义的480x300大小。
当使用SwiftUI时,我应该如何定义Mac应用程序的窗口大小?
macOS
应用程序。考虑“内在大小”。我认为这就是为什么它看起来大约是“两个文本标签的大小”。除非您添加修饰符,否则它应该是这样。那么如果您添加一个修饰符——.frame(width:480, height:300)
会发生什么? - user7014451AppDelegate
来定义这样的东西。在iOS中,您现在希望对大多数内容使用SceneDelegate
,因为对于iPad,您终于拥有了多线程。我猜想,现在您需要将整个屏幕视为应用程序的单个实例的“画布”。因此,在您的示例中,您希望设置每个“场景”或“实例”为480x300,并且在我的看法中,最好的位置不是在场景级别 - 但是您没有提供该上下文 - 而是在View
级别。 - user7014451.frame
? 在VStack上吗? 考虑将您的建议提交为答案而不是评论。 - wiggingAppKit
。所以让我尽力而为... (1) 记住,这仍然是beta 2版本,事情会改变的。(2) 尝试和测试。修饰符的位置和顺序都很重要。所以是的,我会先尝试ContentView
,再尝试Stack
,如果其中任何一个起作用,我建议你提交自己的答案 - 没有问题 - 我肯定会点赞的。 - user7014451