在 SwiftUI 中更改 GroupBox 背景颜色

Posted

技术标签:

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

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

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

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

【问题讨论】:

我认为现在没有办法,但这可能会对您有所帮助:facebook.com/349275022095690/posts/… 【参考方案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将该信息添加到您的答案中。 “不可能”本身只是一个没有解释的评论。

以上是关于在 SwiftUI 中更改 GroupBox 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中点击更改按钮背景颜色

如何在 SwiftUI 中更改表单的背景颜色?

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

SwiftUI 更改内联 navigationBarTitleDisplayMode 的导航栏背景颜色

如何在 SwiftUI mac 应用程序中更改屏幕背景颜色?

SwiftUI - 如何在编辑模式下更改列表的背景