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

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

VStack{
  TopView()
  HomeView()
}
.redacted(.placeholder)

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

https://ibb.co/xFXQ2sk

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

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

【问题讨论】:

    标签: swiftui placeholder shimmer


    【解决方案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' 是个好主意。我会试试的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多