Mac-catalyst - Mac Catalyst 应用程序的最小 window 大小
Mac-catalyst - minimum window size for Mac catalyst app
Mac catalyst 允许调整大小 window,有什么方法可以为 Mac catalyst 应用程序提供最小 window 大小?
用这个方法实现Objective-Cclass:
- (void)setMinimumSize:(CGSize)size {
id app = NSClassFromString(@"NSApplication");
id shared = [app valueForKeyPath:@"sharedApplication"];
id mainWindow = [shared valueForKeyPath:@"mainWindow"];
NSValue *nssize = [NSValue valueWithCGSize:size];
[mainWindow setValue:nssize forKeyPath:@"minSize"];
}
从 Swift 调用 - 使用桥接头。
只需将以下代码块添加到您的 application:didFinishLaunchingWithOptions
方法(对于 UIKit 项目)或 scene(_:willConnectTo:options:)
(对于 SwiftUI 个项目):
UIApplication.shared.connectedScenes.compactMap { [=10=] as? UIWindowScene }.forEach { windowScene in
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 480, height: 640)
}
PS:你也可以在maximumSize
属性那里设置
PS2: 如果将 minimumSize
和 maximumSize
设置为相同的值,则 window 大小将保持不变并且不会'无法调整大小。
这是@marcelosalloum 的出色回答的扩展版本..
步骤 1.
打开AppDelegate.swift
步骤 2.
找到 func application(),在此处插入您的@marcelosalloum 代码版本(或像我一样调用您为此创建的函数)。
步骤 3.
可选择断言您的代码仅 运行 在具有合适 Swift API 的平台上(使用 #available)
示例代码(在AppDelegate.swift)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
addWindowSizeHandlerForMacOS()
return true
}
func addWindowSizeHandlerForMacOS() {
if #available(iOS 13.0, *) {
UIApplication.shared.connectedScenes.compactMap { [=10=] as? UIWindowScene }.forEach { windowScene in
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 1100)
}
}
}
示例屏幕截图
在我的应用程序中,我从第 23 行开始定义了一个名为 addWindowSizeHandlerForMacOS() 的函数。然后我从 application() 调用它在 AppDelegate.swift(第 18 行)中。
Objective-C @marcelosalloum 的回答版本:
for (UIScene* scene in UIApplication.sharedApplication.connectedScenes) {
if ([scene isKindOfClass:[UIWindowScene class]]) {
UIWindowScene* windowScene = (UIWindowScene*) scene;
windowScene.sizeRestrictions.minimumSize = CGSizeMake(480, 640);
}
}
只需将此添加到您的场景委托:
window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 900.0, height: 750.0)
我还添加了如何将最大尺寸设置为最大可能值:
window?.windowScene?.sizeRestrictions?.maximumSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
使用 sizeRestrictions?.minimumSize
或 sizeRestrictions?.maximumSize
为您的 Mac 应用设置最小或最大大小 window。
打开你的SceneDelegate
然后:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else { return }
scene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 600)
scene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 600)
}
我做了一个小小的研究。所以我在 SceneDelegate 的 func 场景中添加了以下内容:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if UIDevice.current.systemName.contains("Mac") {
window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 1024, height: 768)
} else {
// iOS - nothing to change
}
我不确定是否需要系统名称子句,因为 window.windowScene.sizeRestrictoins 对于 iOS 为零,但为了清楚理解和可能的未来更新添加了这个。
我选择 1024x768 作为最小的 iPad 横向尺寸(Catalyst 报告设备为 iPad,横向模式为 Mac OS)
在您的场景委托中,您可以执行以下操作:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let scene = (scene as? UIWindowScene) else { return }
#if targetEnvironment(macCatalyst)
scene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
scene.sizeRestrictions?.maximumSize = CGSize(width: 1280, height: 1200)
#endif
}
Mac catalyst 允许调整大小 window,有什么方法可以为 Mac catalyst 应用程序提供最小 window 大小?
用这个方法实现Objective-Cclass:
- (void)setMinimumSize:(CGSize)size {
id app = NSClassFromString(@"NSApplication");
id shared = [app valueForKeyPath:@"sharedApplication"];
id mainWindow = [shared valueForKeyPath:@"mainWindow"];
NSValue *nssize = [NSValue valueWithCGSize:size];
[mainWindow setValue:nssize forKeyPath:@"minSize"];
}
从 Swift 调用 - 使用桥接头。
只需将以下代码块添加到您的 application:didFinishLaunchingWithOptions
方法(对于 UIKit 项目)或 scene(_:willConnectTo:options:)
(对于 SwiftUI 个项目):
UIApplication.shared.connectedScenes.compactMap { [=10=] as? UIWindowScene }.forEach { windowScene in
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 480, height: 640)
}
PS:你也可以在maximumSize
属性那里设置
PS2: 如果将 minimumSize
和 maximumSize
设置为相同的值,则 window 大小将保持不变并且不会'无法调整大小。
这是@marcelosalloum 的出色回答的扩展版本..
步骤 1. 打开AppDelegate.swift
步骤 2. 找到 func application(),在此处插入您的@marcelosalloum 代码版本(或像我一样调用您为此创建的函数)。
步骤 3. 可选择断言您的代码仅 运行 在具有合适 Swift API 的平台上(使用 #available)
示例代码(在AppDelegate.swift)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
addWindowSizeHandlerForMacOS()
return true
}
func addWindowSizeHandlerForMacOS() {
if #available(iOS 13.0, *) {
UIApplication.shared.connectedScenes.compactMap { [=10=] as? UIWindowScene }.forEach { windowScene in
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 1100)
}
}
}
示例屏幕截图
在我的应用程序中,我从第 23 行开始定义了一个名为 addWindowSizeHandlerForMacOS() 的函数。然后我从 application() 调用它在 AppDelegate.swift(第 18 行)中。
Objective-C @marcelosalloum 的回答版本:
for (UIScene* scene in UIApplication.sharedApplication.connectedScenes) {
if ([scene isKindOfClass:[UIWindowScene class]]) {
UIWindowScene* windowScene = (UIWindowScene*) scene;
windowScene.sizeRestrictions.minimumSize = CGSizeMake(480, 640);
}
}
只需将此添加到您的场景委托:
window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 900.0, height: 750.0)
我还添加了如何将最大尺寸设置为最大可能值:
window?.windowScene?.sizeRestrictions?.maximumSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
使用 sizeRestrictions?.minimumSize
或 sizeRestrictions?.maximumSize
为您的 Mac 应用设置最小或最大大小 window。
打开你的SceneDelegate
然后:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else { return }
scene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 600)
scene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 600)
}
我做了一个小小的研究。所以我在 SceneDelegate 的 func 场景中添加了以下内容:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if UIDevice.current.systemName.contains("Mac") {
window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 1024, height: 768)
} else {
// iOS - nothing to change
}
我不确定是否需要系统名称子句,因为 window.windowScene.sizeRestrictoins 对于 iOS 为零,但为了清楚理解和可能的未来更新添加了这个。
我选择 1024x768 作为最小的 iPad 横向尺寸(Catalyst 报告设备为 iPad,横向模式为 Mac OS)
在您的场景委托中,您可以执行以下操作:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let scene = (scene as? UIWindowScene) else { return }
#if targetEnvironment(macCatalyst)
scene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
scene.sizeRestrictions?.maximumSize = CGSize(width: 1280, height: 1200)
#endif
}