我使用 Mac Catalyst 将游戏移植到 macOS。游戏内容不会动态调整大小,因此我在应用程序开始时强制使用固定的 3:4 纵横比(如 iPad 纵向)。我将此添加到我的 AppDelegate 类中:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
#if targetEnvironment(macCatalyst)
/* some margin */
let titleHeight: CGFloat = 34 * 4
UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
windowScene.titlebar?.titleVisibility = .hidden
/* screen was always 1920x1080 in macOS Catalina */
let height = windowScene.screen.nativeBounds.height - titleHeight
let width = 3 * height / 4
windowScene.sizeRestrictions?.minimumSize = CGSize(width: width, height: height)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: width, height: height)
}
#endif
}
这可以解决问题,但在 15 英寸 MacBook Pro 中,窗口看起来很小。Apple 确认 Catalina 一直在报道1920x1080
,请在此处阅读。
在已修复的 macOS 11 中,现在在 15 英寸 MacBook Pro 中,对于默认的 Retina 显示设置,我得到:
nativeBounds: 3360x2100
bounds: 1680x1050
nativeScale: 2
scale: 2
但是,如果我将 sizeRestrictions 中的高度固定为 1050,则窗口太短。如果我将其设置为 2100,则窗口大约比屏幕高 30% 并且超出范围。
我在UI 指南中读到 Mac Catalyst 应用程序缩小了 77%,因此大约的高度1400
似乎在这里工作。有没有办法以编程方式获得这个比例?
目前,我1.3 * screen.bounds.height
在代码中进行了硬编码。不过,我不是 100% 的正确值sizeRestrictions
,或者它恰好在这个屏幕上。