繁体   English   中英

SwiftUI Gradient 在模拟器上渲染不正确的颜色

[英]SwiftUI Gradient rendering incorrect colors on simulator

在模拟器上运行时, Gradient渲染颜色不正确。 在设备上运行时, Gradient会正确呈现颜色。 如何让Gradient在模拟器上正确渲染颜色,以便我可以捕获准确的屏幕截图?

模拟器与设备:

模拟器 设备

带有Gradient示例View

struct GradientView: View {
    
    private static let backgroundGradientColors: [Color] = [.red, .blue]
    
    var body: some View {
        ZStack {
            GeometryReader { geometryReader in
                let gradient: Gradient = Gradient(colors: GradientView.backgroundGradientColors)
                RadialGradient(gradient: gradient,
                               center: .bottomTrailing,
                               startRadius: 0, endRadius: geometryReader.size.width)
                    .edgesIgnoringSafeArea(.all)
            }
        }
    }

}

如果您使用内置系统颜色,这似乎会发生。 一旦我改为使用具有浅色和深色变体的资产目录颜色,它们就会正确显示。

PS 每次更改颜色以使其在小部件预览中正确显示时,我都必须从 sim 中删除该应用程序。

我也刚碰到这个。 这显然似乎是 Xcode/Simulator 中的一个错误,因为设备上的一切看起来都是正确的。

当我的 MacBook Pro 15" 连接到外部显示器时会发生这种情况,但有趣的是,当我在普通的内置显示器上运行它时,在 SwiftUI 预览和模拟器上一切都显得完全正常。

因此,如果您遇到这种情况并且您使用的是带有外接显示器的笔记本电脑,请尝试拔掉电源,看看是否有帮助。

如果您的梯度在白色背景上在模拟器和Xcode的画布区域预览的目的顶部绘制,则可以解决该漏洞通过使用不同blendMode (如提到这里):

/// Work around Xcode bug where SwiftUI gradients show up as green in the Simulator
let workAroundBlendMode: BlendMode = {
    #if targetEnvironment(simulator)
    return BlendMode.plusDarker
    #else
    return BlendMode.normal
    #endif
}()

RadialGradient(...)
    .blendMode(workAroundBlendMode)

#if targetEnvironment(simulator)保护您的发布版本免受背景不是白色时出现的问题的影响,例如在黑暗模式下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM