首页 > 解决方案 > 暗模式下的颜色不如预期

问题描述

我想创建一个对暗模式有反应的形状,所以在暗模式下颜色应该是白色,在正常模式下应该是黑色。

这是我的代码:(可复制和可运行)

结果 -> 见图片。

我希望如果我将 strokecolor 设置为 UIColor.label.cgColor 它会采用“正确”的颜色,但事实并非如此。我究竟做错了什么?

import SwiftUI
import UIKit

@available(iOS 13.0, *)
public struct DarkView<Content> : View where Content : View {
    var darkContent: Content
    var on: Bool
    public init(_ on: Bool, @ViewBuilder content: () -> Content) {
        self.darkContent = content()
        self.on = on
    }

    public var body: some View {
        ZStack {
            if on {
                Spacer()
                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
                    .background(Color.black)
                    .edgesIgnoringSafeArea(.all)
                darkContent.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity).background(Color.black).colorScheme(.dark)
            } else {
                darkContent
            }
        }
    }
}

@available(iOS 13.0, *)
extension View {
    public func darkModeFix(_ on: Bool = true) -> DarkView<Self> {
        DarkView(on) {
            self
        }
    }
}

class ShapeView : UIView {

    let shapeLayer = CAShapeLayer()

    init() {

        super.init(frame: CGRect.zero)

        shapeLayer.strokeColor = UIColor.label.cgColor

        shapeLayer.path = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0), radius: 100, startAngle: 0, endAngle: CGFloat(Double.pi), clockwise: true).cgPath
        self.layer.addSublayer(shapeLayer)

    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

@available(iOS 13.0, *)
struct ShapeWrapper: UIViewRepresentable {

    func makeUIView(context: UIViewRepresentableContext<ShapeWrapper>) -> ShapeView {

        let view = ShapeView()
        return view
    }

    func updateUIView(_ uiView: ShapeView, context:
        UIViewRepresentableContext<ShapeWrapper>) {
    }
}

struct ContentView: View {
    var body: some View {
        VStack {
        Text("Hello, World!")
        ShapeWrapper()
            .fixedSize()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct ContentViewDarkmode_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
        .environment(\.colorScheme, .dark)
        .darkModeFix()
    }
}

在此处输入图像描述

标签: colorsswiftuiios-darkmode

解决方案


推荐阅读