![](/img/trans.png)
[英]Is it possible to add "Weights" to the colors in a 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.