Xcode 11 - 在催化剂 Swift 中禁用调整大小模式

Posted

技术标签:

【中文标题】Xcode 11 - 在催化剂 Swift 中禁用调整大小模式【英文标题】:Xcode 11 - Disable resize mode in catalyst swift 【发布时间】:2019-12-14 17:39:52 【问题描述】:

我们正在使用 Xcode 11 中的 Catalyst将我们基于 Swift 的 iOS 应用程序转换为 Mac 兼容。

当用户 resize 应用窗口时,我们在 UI 中遇到问题。那么我们可以禁用调整大小模式并为应用窗口提供固定框架吗?

【问题讨论】:

谁给减号,为什么? 【参考方案1】:

您可以在 application:didFinishLaunchingWithOptions 方法中调用它:

    UIApplication.shared.connectedScenes.compactMap  $0 as? UIWindowScene .forEach  windowScene in
        windowScene.sizeRestrictions?.minimumSize = CGSize(width: 480, height: 640)
        windowScene.sizeRestrictions?.maximumSize = CGSize(width: 480, height: 640)
    

【讨论】:

为了解决这个问题,我有一个类似的问题,用户调整催化剂项目窗口的大小,我想在调整窗口大小时放入一些代码来重绘一些视图。这是什么方法?由于这是一个ios项目我不知道是否有'viewDidResize'之类的功能? @samp17:你用什么来设置视图大小?约束还是框架? 情节提要中的约束 @samp17 在您的视图控制器中查看viewWillTransitionToSize:withTransitionCoordinator:。【参考方案2】:

Beta 5 将 sizeRestrictions 属性添加到 UIWindowScene。

如果您将sizeRestrictions.maximumSizesizeRestrictions.minimumSize 设置为相同的值,则窗口将无法调整大小:

windowScene.sizeRestrictions?.minimumSize = CGSize(width: 640, height: 480)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 640, height: 480)

添加此代码最简单的地方可能是场景委托中的scene(_:willConnectTo:options:)。传入的scene 对象是UIWindowScene,所以只需转换它,然后设置sizeRestrictions

注意:sizeRestrictions 仅在 iOS 10.15 Beta 5 中可用。此代码将在旧 Beta 版中崩溃。

【讨论】:

我需要在哪里写上面的代码?在 SceneDelegate 文件中? 感谢 adam 的帮助,问题是崩溃问题在 macOS Catalina beta 5 中得到解决。 是的,您的场景代理可能是最简单的。我更新了我的答案。 我在尝试禁用 ios 计算器应用程序的调整大小模式并尝试使用催化剂将其转换为 mac 时遇到同样的问题。而且这个解决方案对我不起作用。 在使用 SwiftUI 通用的 Xcode 12.2 测试版中,我没有 SceneDelegate 文件。我可以在哪里以及如何在我的 @main 应用程序文件中插入代码?

以上是关于Xcode 11 - 在催化剂 Swift 中禁用调整大小模式的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS 15 swift 上禁用键盘上的自动填充。 Xcode 13

禁用火花催化剂优化器

Xcode Swift UI 测试 - 模拟器硬件键盘

Mac 催化剂和 iOS 13.5

模态对话框在基于 Mac 催化剂场景的应用程序中中断响应者链

在 Storyboard 和 Swift 2 中禁用 UIButton 突出显示