如何更改 SwiftUI 编辑的微光效果的颜色

Posted

技术标签:

【中文标题】如何更改 SwiftUI 编辑的微光效果的颜色【英文标题】:How to change the Color of SwiftUI redacted shimmer effect 【发布时间】:2022-01-03 11:49:22 【问题描述】:

我为我的主屏幕添加了闪光效果,如下面的代码。

VStack
  TopView()
  HomeView()

.redacted(.placeholder)

我得到了如下图所示的输出。

https://ibb.co/xFXQ2sk

微光视图显示彩色视图的颜色,但普通视图显示灰色。

我可以将整个微光视图更改为灰色而不在微光中显示彩色视图吗?

【问题讨论】:

【参考方案1】:

一种方法可能是调整您的自定义子视图,以响应它们是否被要求显示为密文。

例如,如果您有一个在红色背景中添加一段文本的视图,例如:

struct LabelView: View 
  var text: String

  var body: some View 
    Text(text)
       .padding()
       .background(Color.red)
  

然后,您可以在编辑时将其调整为使用灰色:

struct LabelView: View 
  @Environment(\.redactionReasons) var redactionReasons
  var text: String

  var body: some View 
    Text(text)
       .padding()
       .background(redactionReasons.contains(.placeholder) ? Color.gray : Color.red)
  


【讨论】:

yup 谢谢,使用这种方法我得到了我想要的结果,但我需要检查每个子视图的背景颜色,我们需要在每个结构视图中声明环境。有没有办法在普通类中编写环境。 我不认为有,真的。当您构建需要使用编辑的自定义视图时,您可以将其留给您的子视图(文本、图像等)来实现它们的默认行为或。但是当这不起作用时,默认的编辑会留在你不想要的元素中,比如背景颜色,你必须介入并告诉你自己的视图如何编辑自己。 如果您发现自己一遍又一遍地编写相同的自定义修订代码,您可以提取该通用代码——例如,创建您自己的 redactableBackground 修饰符并使用它来代替 background。这将减少散布在各处的自定义编辑代码的数量。 'redactableBackground' 是个好主意。我会试试的

以上是关于如何更改 SwiftUI 编辑的微光效果的颜色的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI视图状态更改使用withAnimation()方法无动画效果的解决

SwiftUI视图状态更改使用withAnimation()方法无动画效果的解决

在 SwiftUI 上更改颜色视图

SwiftUI:如何使列表视图透明?如何更改列表视图背景颜色?

有没有办法在 SwiftUI 中更改列表的背景颜色? 2020 (iOS 14)

SwiftUI 2.0如何更改表单部分的背景颜色[重复]