Mac催化剂允许调整窗口大小,以任何方式为Mac催化剂应用程序提供最小窗口大小吗?
答案 0 :(得分:3)
只需将以下代码块添加到您的application:didFinishLaunchingWithOptions
方法中即可:
UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 480, height: 640)
}
PS:您还可以在此处设置maximumSize
属性
答案 1 :(得分:2)
使用此方法实现Objective-C类:
- (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调用-使用桥接头。
答案 2 :(得分:1)
使用sizeRestrictions?.minimumSize
或sizeRestrictions?.maximumSize
为Mac应用程序窗口设置最小或最大大小。
打开您的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)
}
答案 3 :(得分:1)
在场景代表内部,您可以执行以下操作:
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
}
答案 4 :(得分:0)
这是@marcelosalloum出色答案的扩展版本。
第1步。 打开 AppDelegate.swift
第2步。 找到 func application(),在此处插入您的@marcelosalloum代码版本(或像我一样调用为此创建的函数)。
第3步。 (可选)断言您的代码仅在具有适当Swift API的平台上运行(使用 #available )
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 { $0 as? UIWindowScene }.forEach { windowScene in
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 1100)
}
}
}
在我的应用程序中,我从第23行开始定义了一个名为 addWindowSizeHandlerForMacOS()的函数。然后从 AppDelegate.swift < / em>(第18行)。
答案 5 :(得分:0)
@marcelosalloum答案的目标C版本:
for (UIScene* scene in UIApplication.sharedApplication.connectedScenes) {
if ([scene isKindOfClass:[UIWindowScene class]]) {
UIWindowScene* windowScene = (UIWindowScene*) scene;
windowScene.sizeRestrictions.minimumSize = CGSizeMake(480, 640);
}
}
答案 6 :(得分:0)
只需将其添加到场景委托中即可:
window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 900.0, height: 750.0)
我还添加了如何将最大大小设置为最大可能值:
window?.windowScene?.sizeRestrictions?.maximumSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
答案 7 :(得分:0)
我做了一个小研究。因此,我在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
}
我不确定是否需要系统名称子句,因为iOS的window.windowScene.sizeRestrictoins为nil,但是为了清楚理解和将来的更新而添加了它。
我选择1024x768作为最小的iPad横向尺寸(Catalyst将设备报告为横向模式为Mac OS的iPad)