[英]How to set a default/preferred window size for a Mac Catalyst app?
我有一个启用了 Catalyst 的 iOS 应用程序。 应用程序中的一项功能会打开一个新窗口。 默认情况下,此窗口打开得非常大,但我需要一种方法使其默认变小。 我知道您可以设置windowScene.sizeRestrictions?.minimumSize
和.maximumSize
,但这会将窗口限制为我喜欢的大小。 我想让它打开一个特定大小的窗口,默认为500x800
,但用户可以将其扩展为他们想要的任何大小。
我在 SceneDelegate 中尝试过window?.frame = CGRect(origin: .zero, size: CGSize(width: 500, height: 800))
SceneDelegate
但没有效果。
视觉示例:
想通了,所以我将来会帮助任何人解决这个问题。 将.maximumSize
设置为首选尺寸。 然后在设置窗口后,使用DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
再次设置.maximumSize
,但这一次你想要的实际最大窗口大小。
我的完整代码:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
#if targetEnvironment(macCatalyst)
let toolbarDelegate = NewSchoolworkToolbar()
let toolbar = NSToolbar(identifier: "main")
windowScene.title = "New Schoolwork"
if let titlebar = windowScene.titlebar {
titlebar.toolbar = toolbar
titlebar.toolbarStyle = .unified
titlebar.separatorStyle = .shadow
}
#endif
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
let newClassworkView = NewClassworkTableViewController()
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 400, height: 500)
// This will be your "preferred size"
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 500, height: 800)
window.rootViewController = newClassworkView
self.window = window
window.makeKeyAndVisible()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
// This will be your actual size.
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 9000, height: 9000)
}
}
按照迪伦的绝妙秘诀,
func tidyCatalystWindow() {
#if targetEnvironment(macCatalyst)
UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }
.forEach { ws in
ws.sizeRestrictions?.minimumSize = CGSize(width: 500, height:800)
ws.sizeRestrictions?.maximumSize = CGSize(width: 500, height: 800)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
ws.sizeRestrictions?.maximumSize = CGSize(width: 9000, height: 9000)
}
}
#endif
}
就这么容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.