即使使用黑色背景 SwiftUI,方向更改时也会出现白色闪烁

joh*_*m9r 5 xcode swiftui

我有一个 ZStack,我将颜色设置为黑色,然后添加一个 VideoPlayer。当我旋转设备时,播放器周围仍然有白色闪烁。我尝试过各种想法、背景颜色、前景色、不透明度,但没有任何效果。我只是希望背景是黑色的,这样它看起来就像一个平滑的旋转。有人有任何建议或修复吗?这是我的代码:

import Foundation
import SwiftUI
import AVKit

struct VideoDetail: View {
    
var videoIDString: String
var videoThumbURL: String
@State var player = AVPlayer()

var body: some View {
    
    ZStack {

        Color.black
            .edgesIgnoringSafeArea(.all)
        
        let videoURL: String = videoIDString

        VideoPlayer(player: player)
            //.frame(height: 200)
            .edgesIgnoringSafeArea(.all)
            .onAppear {
                
                player = AVPlayer(url: URL(string: videoURL)!)
                player.play()
            }
            .onDisappear {
                
                player.pause()
            }
    }
    .navigationBarHidden(true)
    .background(Color.black.edgesIgnoringSafeArea(.all))
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 2

我遇到了同样的问题并找到了解决方案:您可以设置托管窗口的根视图控制器视图的背景颜色。您无法在 SwiftUI 中直接访问此内容,因此为了执行此操作,您可以使用此答案中描述的方法。

只需复制withHostingWindow视图扩展,包括HostingWindowFinder某处,并在视图中使用以下代码将背景颜色设置为黑色:

    var body: some View {
        ZStack {
            // ...
        }
        .withHostingWindow { window in
            window?.rootViewController?.view.backgroundColor = UIColor.black
        }
    }
Run Code Online (Sandbox Code Playgroud)

之后,旋转时的白角应该消失了!

  • 是的,当其他方法都没有解决问题时,这解决了问题。作为 .withHostingWindow 的替代方案,您可以在 ```onAppear()``` 方法中使用 ```if let window = (UIApplication.shared.connectedScenes.first as? UIWindowScene)?.windows.first`` 。 (2认同)