如何处理 SKView() 之外的黑色区域(在Swift Playground)

How to deal with the black area beyond the SKView() (In Swift Playground)

我正在尝试在 Swift Playground 中的工作 运行 中使用 SpriteKit+SwiftUI。这是我的一些代码

struct SwiftUI: View {
    var body: some View {
         Test() 
    }
}
struct Test: UIViewRepresentable {
    func makeUIView(context: Context) -> SKView {
        let sceneView = SKView()
        let gameScene = GameScene()
        gameScene.size = CGSize(width: 500, height: 600)
        gameScene.scaleMode = .aspectFit
        sceneView.presentScene(gameScene)
        return sceneView
    }
    func updateUIView(_ uiView: SKView, context: Context) {
    }
}

它运行良好,但总是有这个可怕的黑色区域超出我的 SKView,如下图所示。
Black area in the View.
我曾尝试更改 sceneView.backgroundcolor,或更改 gameScene.sizesceneView.size,但这些都不起作用。 如果您能给我一些建议,非常感谢!

问题是对 Test() 的调用还需要设置明确的帧大小。否则,Test 视图会占据整个可用屏幕 space,而 sceneView 只会占据其中的一部分 space。

下面的示例与您发布的示例相同,在 Test() 上设置了一个显式框架(和一个虚拟 GameScene)。这在操场上有效,结果只是一个紫色方块,视图之外没有黑色区域:

import SwiftUI
import SpriteKit
import PlaygroundSupport

let width: CGFloat = 500
let height: CGFloat = 500

struct ContentView: View {
    var body: some View {
         Test()
            .frame(width: width, height: height)
    }
}
struct Test: UIViewRepresentable {
    func makeUIView(context: Context) -> SKView {
        let sceneView = SKView()
        let gameScene = GameScene()
        gameScene.size = CGSize(width: width, height: height)
        gameScene.scaleMode = .aspectFit
        sceneView.presentScene(gameScene)
        return sceneView
    }
    func updateUIView(_ uiView: SKView, context: Context) {
    }
}

class GameScene: SKScene {
    override func didMove(to view: SKView) {
        let node = SKShapeNode(rect: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        node.fillColor = .purple
        addChild(node)
    }
}


PlaygroundPage.current.setLiveView(ContentView())