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

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

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

【问题讨论】:

  • 谁给减号,为什么?

标签: swift xcode11 uikitformac mac-catalyst


【解决方案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 应用程序文件中插入代码?
猜你喜欢
  • 2020-08-03
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2014-05-30
相关资源
最近更新 更多