【IOS开发】SwiftUI中IOS设备切换成dark模式后字体看不见的解决方案,根据手机背景色模式修改字体颜色!

news/2024/7/20 22:08:57 标签: ios, swiftui, objective-c

在 SwiftUI 中,当设备切换为 Dark模式时,文字的颜色可能与背景颜色相似,导致文字无法看清。为了解决这个问题,你可以在视图中设置适应 Dark 模式的文字颜色。

1.文字的颜色调整

以下是一种常见的方法,可以尝试在 SwiftUI 视图中使用 colorScheme 环境变量和 foregroundColor 修饰符来调整文字的颜色:

struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme
    
    var body: some View {
        Text("Hello, World!")
            .foregroundColor(colorScheme == .dark ? .white : .black)
    }
}

在上面的示例中,我们通过使用 @Environment(.colorScheme) 来获取当前的颜色方案,然后根据 colorScheme 的值设置文字的前景色。如果当前颜色方案为 .dark(即 Dark 模式),我们将文字颜色设置为白色,否则设置为黑色。

通过这种方式,当设备切换为 Dark 模式时,文字颜色将自动调整为适应该模式,以确保可读性。

注意,根据你的具体布局和设计需求,你可能需要在其他视图或组件中进行类似的调整。确保在适当的位置设置文字的前景色,以便在 Dark 模式下保持良好的可读性。

2.@Environment是干嘛的?

  • @Environment 是 SwiftUI 中的一个属性包装器(property
    wrapper),用于访问环境变量的值。环境变量是一种在 SwiftUI
    视图层次结构中传递和共享数据的方式,可以提供应用程序的全局状态、配置信息和其他上下文相关的值。
  • @Environment
    属性包装器允许你声明一个属性,该属性从环境中获取对应的值。通过这种方式,你可以在视图中轻松地访问环境变量,而不必手动传递它们。

在 SwiftUI 中,有一些内置的环境变量可以通过 @Environment 来访问,例如:

  • .colorScheme: 当前的颜色方案(.light 或 .dark)。
  • .locale: 当前的区域设置信息。
  • .sizeCategory: 当前的内容大小类别。
  • .isEnabled: 视图是否启用的布尔值。

你还可以自定义和传递自己的环境变量,以便在视图层次结构中共享数据。

以下是一个示例,演示如何使用 @Environment 属性包装器来获取当前的颜色方案:

struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme
    
    var body: some View {
        if colorScheme == .dark {
            Text("Dark Mode")
                .foregroundColor(.white)
                .background(Color.black)
        } else {
            Text("Light Mode")
                .foregroundColor(.black)
                .background(Color.white)
        }
    }
}

在上面的示例中,我们使用 @Environment(.colorScheme) 将 colorScheme 属性声明为从环境中获取当前的颜色方案。然后,我们根据颜色方案的值来设置相应的文本颜色和背景色。

通过 @Environment 属性包装器,我们可以方便地访问环境变量的值,从而在视图中根据环境的上下文进行相应的逻辑和样式调整。


http://www.niftyadmin.cn/n/414685.html

相关文章

Python自动刷新缓冲区

在 Python 中,可以通过设置标准输出的缓冲区来实现自动刷新。可以使用 sys.stdout 对象的 flush 方法手动刷新缓冲区。为了实现自动刷新,可以使用 io 模块中的 TextIOWrapper 类将标准输出包装为一个文本流,并设置其缓冲区为行缓冲&#xff0…

ai聊天对话工具哪种好用?这些ai对话聊天工具不要错过

在如今信息爆炸的时代,人工智能技术正在逐渐渗透到我们的生活和工作中。ai对话聊天技术作为其中的一项重要应用,吸引了越来越多的关注。但是,ai对话聊天技术并不是万能的,它需要一定的技巧和策略才能真正发挥其价值。那么&#xf…

ArduPilot之H743遗留配置问题解决

ArduPilot之H743遗留配置问题解决 1. 源由2. 资源3 遗留问题汇总3.1 问题一:无法设置VTX 600m3.2 问题二:双向Dshot未显示RMP转速3.3 问题三:mavlink esp32 2.4G WiFi电传 4. 视频5. 参考资料 1. 源由 在ArduPilot开源代码之H743BMI270x2Chi…

【业务功能篇20】Springboot java逻辑实现动态行转列需求

在此前,我也写过一个行转列的文章,是用存储过程sql处理的一个动态的逻辑 Mysql 存储过程\Mybatis框架call调用 实现动态行转列 那么后面我们同样又接收了业务的一个新需求,针对的是不同的业务数据,做的同样的一个展示数据报表&…

C++类和对象-4

在上篇C类和对象的博客中,我们讲述了析构函数、拷贝构造函数、浅拷贝和深拷贝的内容,我们紧接上文,开始讲述接下来的文章。 目录 1.this指针 1.1引入 1.2内容 1.3特征 1.4用法 2.静态成员 2.1内容 2.2静态数据成员 2.3静态成员函数…

05_MySQL索引优化

四种:1.主键 2.单值 3.唯一 4.复合 1. 性能分析(explain) mysql5.6以后优化器做了很多改进,执行时会自动进行大量的优化,很多现象需要在5.5才能演示成功。 1.1 explain是什么? 模拟优化器查看执行计划 使用EXPLAIN关…

通过 Python 封装关键词搜索阿里巴巴商品api接口

以下是使用 Python 封装关键词搜索阿里巴巴商品列表数据的步骤: 使用 requests 库向阿里巴巴搜索接口发送 HTTP 请求,可以使用 GET 或 POST 方法,请求参数中应包含搜索关键词、每页展示数量、当前页码等信息。 解析返回的 response 中的 HTM…

高并发下如何保证接口幂等性?

文章目录 前言: 一、insert前先select 二、加悲观锁 三、加乐观锁 四、加唯一索引 五、建防重表 六、根据状态机 七、加分布式锁 八、获取token 前言: 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分…