【问题标题】:Change GroupBox background color in SwiftUI在 SwiftUI 中更改 GroupBox 背景颜色
【发布时间】:2020-10-09 09:03:29
【问题描述】:

如何在 SwiftUI 中更改 GroupBox 视图的默认灰色背景颜色?

我尝试添加背景修饰符,但这只会改变框下方的白色背景(见截图)。

GroupBox(label: Text("Label"), content: {
    Text("Content")
})
.background(Color.blue)

【问题讨论】:

标签: swiftui ios14 xcode12


【解决方案1】:

这是默认的组框样式。您可以使用自定义样式创建所需的任何组框。

这是一个例子。使用 Xcode 12 / iOS 14 测试。

struct DemoGroupBox: View {
    var body: some View {
        GroupBox(label: Text("Label"), content: {
             Text("Content")
        })
        .groupBoxStyle(TransparentGroupBox())
        .padding()
    }
}

struct TransparentGroupBox: GroupBoxStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.content
            .frame(maxWidth: .infinity)
            .padding()
            .background(RoundedRectangle(cornerRadius: 8).fill(Color.blue))
            .overlay(configuration.label.padding(.leading, 4), alignment: .topLeading)
    }
}

【讨论】:

  • 这很有用,但我不认为它算作“答案”,因为你必须自己布置标签。在开头加上“你不能”,这才是真正的答案。
【解决方案2】:

尝试使用任何你想要的覆盖修饰符。如果在叠加层中使用 .fill,它会改变背景颜色,但也会覆盖底层视图。

我使用了描边清晰的 RoundedRectangle 视图,而不是 .fill。这是一种设置 GroupBox 样式的简单方法。

.overlay(
   RoundedRectangle(cornerRadius: 15)
      .stroke(Color.purple, lineWidth: 5)
  )    

【讨论】:

    【解决方案3】:

    简短回答:SwiftUI 目前不正确支持 :(

    更长的答案:您可以创建一个自定义GroupBoxStyle(请参阅example),这将允许您更改背景......但代价是必须手动布局内容(这有点违背目的) .

    【讨论】:

    • 你是说其他两个已经社区验证的答案不正确?如果有,为什么不满足要求?
    • @JeremyCaney 我想向任何寻求“一目了然”解决方案的人明确表示,不可能简单地更改背景颜色。提议的“解决方案”改变了背景颜色 - 是的 - 但迫使您必须设置角半径,标签布局......使其更有效(更少的代码行)简单地制作一个自定义组件,因为它真的没有不再是标准的 SwiftUI 组件。
    • 示例:VStack() { Text("Label").frame(maxWidth: .infinity, alignment: .leading).padding(.leading, 8) Text("Label") }.padding().background(Color.blue).cornerRadius(15)
    • edit将该信息添加到您的答案中。 “不可能”本身只是一个没有解释的评论。
    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 2020-10-11
    • 2021-07-25
    • 2020-03-02
    • 2020-11-28
    • 2021-02-11
    • 2020-01-01
    相关资源
    最近更新 更多