colors - 暗模式下的颜色不如预期
问题描述
我想创建一个对暗模式有反应的形状,所以在暗模式下颜色应该是白色,在正常模式下应该是黑色。
这是我的代码:(可复制和可运行)
结果 -> 见图片。
我希望如果我将 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()
}
}
解决方案
推荐阅读
- python-3.x - wxPython 标签放置在 wx.TextCtrl() 文本输入上
- c++ - 是否可以明确判断用户是否使用笔记本电脑?
- postgresql - 如何取消对postger的约束?
- node.js - Nodejs:创建 EventEmitter 对象
- javascript - 基于道具变化的动画反应(功能)组件
- c++ - 是否可以在我的程序运行时暂停所有 Windows Defender 任务,并在完成后恢复?
- python - 具有多个值的 Django REST Framework 过滤器后端?
- r - 使用 dplyr 计算以某些字符串开头和结尾的列的 rowSums 的最优雅方法
- laravel - 如何向 vue(对象)数据添加新属性?
- react-native - VS Code React Native 项目中更漂亮问题的自动修复或快捷方式