SwiftUI GroupBoxStyle填充高度
我有一个自定义的SwiftUI GroupBoxStyle填充高度,swiftui,Swiftui,我有一个自定义的GroupBoxStyle,我想在它的左边缘添加一条彩色线,它占据了GroupBoxStyle的整个高度。然后在VStack 这里蓝色是GroupBox的内容,黄色是我要添加的那一行。蓝色内容可以是任何视图 在我当前的实现中(见下文),问题是垂直线没有占据GroupBox的所有高度 这个实现和示例创建了这一点(请注意,黄色不代表行的整个高度) 这里有一个解决方案(我保留了原始的额外修饰符,但假设它们是为了调试目的) 公共结构标准GroupBoxStyle:GroupBoxS
GroupBoxStyle
,我想在它的左边缘添加一条彩色线,它占据了GroupBoxStyle的整个高度。然后在VStack
这里蓝色是GroupBox的内容,黄色是我要添加的那一行。蓝色内容可以是任何视图
在我当前的实现中(见下文),问题是垂直线没有占据GroupBox的所有高度
这个实现和示例创建了这一点(请注意,黄色不代表行的整个高度)
这里有一个解决方案(我保留了原始的额外修饰符,但假设它们是为了调试目的)
公共结构标准GroupBoxStyle:GroupBoxStyle{
public func makeBody(配置:Self.configuration)->一些视图{
HStack(间距:0){
配置.内容
.padding(.leading,5)
.border(Color.green)/这里有一个解决方案(我保留了原始的额外修饰符,但假设它们是为了调试目的)
公共结构标准GroupBoxStyle:GroupBoxStyle{
public func makeBody(配置:Self.configuration)->一些视图{
HStack(间距:0){
配置.内容
.padding(.leading,5)
.border(Color.green)//这是意料之中的事。我想知道为什么我的解决方案不起作用。有什么想法吗?这是意料之中的事。我想知道为什么我的解决方案不起作用。有什么想法吗?
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
ScrollView {
VStack(spacing: 8) {
GroupBox {
HStack {
VStack {
Text("Hello")
Text("Hello")
Text("Hello")
Text("Hello")
}
Spacer()
}
}
GroupBox {
Color.blue
.frame(height: 50)
}
}
// try to uncomment this
// .padding(8)
}
.groupBoxStyle(StandardGroupBoxStyle())
.navigationBarTitle("My Group", displayMode: .large)
}
}
}
public struct StandardGroupBoxStyle: GroupBoxStyle {
public func makeBody(configuration: Self.Configuration) -> some View {
HStack(spacing: 0) {
Color.yellow
.frame(width: 5)
.frame(maxHeight: .infinity)
VStack {
configuration
.content
}
.border(Color.green)
Spacer()
}
.border(Color.red)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
public struct StandardGroupBoxStyle: GroupBoxStyle {
public func makeBody(configuration: Self.Configuration) -> some View {
HStack(spacing: 0) {
configuration.content
.padding(.leading, 5)
.border(Color.green) // << debug?
Spacer() // << debug?
}
.overlay(Color.yellow.frame(width: 5), alignment: .leading)
.border(Color.red) // << debug?
}
}