【问题标题】:SwiftUI Gradient rendering incorrect colors on simulatorSwiftUI Gradient 在模拟器上渲染不正确的颜色
【发布时间】:2020-12-29 12:38:46
【问题描述】:

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

模拟器与设备:

ViewGradient 的示例:

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)
            }
        }
    }

}

【问题讨论】:

  • 奇怪的事情。我在模拟器和设备上得到了相同的外观。
  • 看起来你的模拟器颜色是[.green, .red]而不是[.blue, .red]
  • 是的,Gradient 在混合时似乎在模拟器上用蓝色做一些奇怪的事情。使用 [.blue, .blue] 效果很好,因为没有发生混合。
  • 这也发生在我身上,我无法修复它。尝试了以下所有方法,禁用外部显示器。 @DanielStorm .blue/.blue 也适用于我们,但添加 2 diff blues 会将所有内容变为绿色。
  • 适用于 Xcode 12 / iOS 14

标签: ios swift swiftui ios-simulator ios14


【解决方案1】:

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

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

【讨论】:

  • 可悲的是,对我来说,使用资产目录颜色时也会发生这种情况。从 sim 中删除应用程序都不能解决问题。
【解决方案2】:

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

这发生在我的 MacBook Pro 15" 连接到外接显示器时,但有趣的是,当我在正常的内置显示器上运行 SwiftUI 预览和模拟器时,一切看起来都完全正常。

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

【讨论】:

  • 在我的 MacBook Pro 15 上没有外接显示器时也会发生这种情况。预览窗格和模拟器显示奇怪的颜色,但在物理设备上它们没问题。
【解决方案3】:

如果您的渐变绘制在白色背景上以便在模拟器和 Xcode 画布区域中进行预览,您可以使用不同的blendMode(如提到的here)来解决该错误:

/// 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) 保护您的发布版本免受背景不是白色时出现的问题的影响,例如在深色模式下。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多