gpt4 book ai didi

swift - 如何找到不使窗口大于屏幕尺寸的 View 的最大尺寸?

转载 作者:行者123 更新时间:2023-12-03 18:07:36 25 4
gpt4 key购买 nike

我正在开发一个需要显示大图像的 MacOS 应用程序。如果我天真地将 ImageView 设置为全尺寸图像,则应用程序的窗口可能会被迫变得大于屏幕尺寸。我想要做的是计算出在将整个窗口(还包含其他 UI 元素)保留在屏幕上的同时可以将图像制作多大。

我知道我可以使用 NSScreen:visibleFrame() 查询可用屏幕空间量,但这似乎没有多大帮助,因为除非我对 UI 的其余部分将占用多少空间做出大量假设这就失去了基于约束的 UI 布局的意义。

另一种方法可能是找到一种方法来限制窗口大小,然后让 Cocoa 计算出 View 的大小。然而,Xcode 中的 UI 编辑器似乎只允许指定静态大小,这没有多大帮助。

看起来这在 SwiftUI 中是可能的 ( https://www.hackingwithswift.com/quick-start/swiftui/how-to-adjust-the-way-an-image-is-fitted-to-its-space )

Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)

但是,我正在开发的应用程序需要在 SwiftUI 支持的较旧版本的 MacOS 上运行,因此我需要知道如何在 swift 中但使用纯 Cocoa 来执行此操作。

最佳答案

我要尝试的第一件事是修改约束的优先级,使 ImageView 足够大以容纳图像。那就是它的content compression resistance priority 。我认为如果您将其设置为 .dragThatCanResizeWindow 那么您可能会免费获得您想要的行为。这是因为当您拖动窗口边缘时,系统已经将窗口限制为屏幕大小。因此,据推测,该隐式约束的优先级高于 .dragThatCanResizeWindow

如果这不起作用,您可以通过设置窗口的 maxSize property 以编程方式设置窗口的最大帧大小。 。每次屏幕配置更改或窗口移动到不同屏幕时,您都需要进行设置。对于前者,您可以观察NSApplication.didChangeScreenParametersNotification。对于后者,您的窗口委托(delegate)可以实现 windowDidChangeScreen(_:) 或者您可以观察 NSWindow.didChangeScreenNotification

关于swift - 如何找到不使窗口大于屏幕尺寸的 View 的最大尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61068882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com