ios - 忽略 SwiftUI Color 或 View 增加的配色方案对比度

标签 ios swift swiftui

我的应用程序中的设置选项的样式为纯色背景上的图标和旁边的文本标签,类似于 Apple 的 iOS 设置应用程序中的项目:

HStack(alignment: .center, spacing: 0) {
    Image(...)
    .foregroundColor(.white)
    .frame(width: 28, height: 28, alignment: .center)
    .background(
        RoundedRectangle(cornerRadius: 6, style: .continuous)
        .fill(Color.blue)) // Color may be a property instead, simplified here.
    .accessibility(hidden: true)

    Text(title)
        .font(.system(
            size: 16,
            weight: .medium,
            design: .rounded))
        .padding(.leading)
}

但是,我注意到,当启用系统“增加对比度”辅助功能选项时,我的图标 View 的背景颜色 ( SwiftUI Color ) 会发生变化,而 Apple 设置图标的背景颜色则不会。例如,启用“增加对比度”后,Color.orange 看起来更像红色。

因此,如果当前配色方案的对比度设置 ( ColorSchemeContrast environment value ) 设置为 .increased,我想忽略它,仅用于图标 View 的背景颜色。

不幸的是,使用环境修饰符会产生错误,因为 .colorSchemeContrast 不是可写属性: .environment(\.colorSchemeContrast, .standard)。 Apple 对此也有类似的记录:“您的应用程序无法覆盖用户的选择。”。

我只是想在对比度增加时避免特定的小区域颜色变化,就像苹果自己所做的那样,所以我只能假设应该有某种方法来实现这一点。

还有其他方法可以解决这个问题吗?

最佳答案

答案可能会晚一些,但我自己也偶然发现了这个问题并找到了解决方案。

支持自定义颜色的明暗模式

首先,每当您想要使用自定义颜色并支持浅色和深色模式时,在资源库中创建自定义颜色总是一个好主意:

  • 转到您的资源库(通常是 images.xcassets)
  • 点击 Assets 导航器中的 +
  • 选择“颜色集”并为新颜色命名
  • 在检查器区域(屏幕右侧)中,选择属性检查器,然后将“外观”设置为“任意、浅色、深色”。这将允许您为所有外观提供颜色。

如果您随后使用 Color("testColor")UIColor(named: testColor) ,您会看到您的颜色自动适应明暗模式

预期高对比度

当用户在系统辅助功能设置中启用高对比度时,您会注意到您的颜色不再同时适用于浅色和深色模式。不过不用担心,只需选中一个复选框即可启用此功能:

  • 前往您的资源库
  • 选择您想要支持高系统对比度的颜色
  • 选中“高对比度”复选框

这允许您定义另一种自定义颜色以获得高系统对比度,但默认情况下它只是复制您之前定义的颜色。

关于ios - 忽略 SwiftUI Color 或 View 增加的配色方案对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60577876/

相关文章:

swift - 如何创建一个不可移动的TableView?

ios - 如何获取所有NSArray中存在的对象

ios - 在 Swift 上从 URL 加载/下载图像

ios - 在 IOS10 设备上禁用今日小部件

ios - 如何在 SWIFT 项目中使用 iosMath?响应。如何将 MTMathUILabel() 添加到项目中?

swift - Lambda/闭包大小导致编译超时

list - 如何为 SwiftUI 列表中的单个行设置动画?

ios - ScrollView 内的 SwiftUI 文本,无法在两个轴上滚动

swiftui - 如何在不使用部分的情况下创建具有分隔成员的 SwiftUI 列表

ios - 在 UITableViewCell 中逐行显示字符串的动画