我正在将我的 SpriteKit 应用程序从 iOS 移植到 MacOS。我正在 main.storyboard 中设计我的主菜单,我有一个图像作为背景。然而,当我调整窗口大小时,我的图像并没有填满整个屏幕。

我试过了:

.scaleAxesIndependently //???
.scaleNone //Centre
.scaleProportionallyDown //???
.scaleProportionallyUpOrDown //AspectFit

但没有一个与 .aspectFill 相同。

我正在使用 swift

最佳答案

子类化 NSImageView 并覆盖 intrinsicContentSize 您将能够调整图像保持纵横比的大小,如下所示:

class AspectFillImageView: NSImageView {
    override var intrinsicContentSize: CGSize {
        guard let img = self.image else { return .zero }

        let viewWidth = self.frame.size.width
        let ratio = viewWidth / img.size.width
        return CGSize(width: viewWidth, height: img.size.height * ratio)
    }
}

如果您只想填充整个 View 而忽略比例,请改用此扩展名:
extension NSImage {
    func resize(to size: NSSize) -> NSImage {
        return NSImage(size: size, flipped: false, drawingHandler: {
            self.draw(in: $0)
            return true
        })
    }
}

扩展用法:
NSImage.resize(to: self.view.frame.size)

关于swift - NSImageView 上的 .aspectFill,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51274931/

10-13 09:00