Ios 在SwiftUI的列表行中添加形状
我正在尝试创建一个列表视图,其中的行如下所示: 但是,我无法对齐前面的Ios 在SwiftUI的列表行中添加形状,ios,swiftui,swiftui-list,Ios,Swiftui,Swiftui List,我正在尝试创建一个列表视图,其中的行如下所示: 但是,我无法对齐前面的圆圈。尝试在VStack中使用Spacer(),HStack,但它就是不起作用。这是我的代码及其输出 struct PeopleView: View { let people = ["Adam", "James"] var body: some View { NavigationView { List {
圆圈
。尝试在VStack
中使用Spacer()
,HStack
,但它就是不起作用。这是我的代码及其输出
struct PeopleView: View {
let people = ["Adam", "James"]
var body: some View {
NavigationView {
List {
ForEach(people, id: \.self) { person in
HStack {
Circle()
VStack {
Text("\(person)")
}
}
}
}
.navigationBarTitle("People", displayMode: .inline)
}
}
}
SwiftUI中的一些视图填满了所有可用空间。这些视图包括形状、颜色、间隔符、分隔符和
GeometryReader
您的圆
是一个形状,其行为类似于间隔圈
(就填充空间而言)
如果用圆的图像替换Circle
,它将起作用:
ForEach(people, id: \.self) { person in
HStack {
Image(systemName: "circle.fill")
.imageScale(.large)
Spacer()
VStack {
Text("\(person)")
}
}
}
SwiftUI中的某些视图会填满所有可用空间。这些视图包括形状、颜色、间隔符、分隔符和
GeometryReader
您的圆
是一个形状,其行为类似于间隔圈
(就填充空间而言)
如果用圆的图像替换Circle
,它将起作用:
ForEach(people, id: \.self) { person in
HStack {
Image(systemName: "circle.fill")
.imageScale(.large)
Spacer()
VStack {
Text("\(person)")
}
}
}
实际上,在这种情况下,您不需要形状本身,而只需要将其作为一个遮罩,以直观的方式在圆圈中呈现文本 因此,解决方案可以如下所示
HStack{
文本(person.prefix(2).uppercased()).bold()
.foregroundColor(.白色)
.padding()
.背景(颜色.红色)
.mask(Circle())/实际上,在这种情况下,您不需要形状本身,而只需要将其作为一个掩码,以直观的方式在圆中显示文本
因此,解决方案可以如下所示
HStack{
文本(person.prefix(2).uppercased()).bold()
.foregroundColor(.白色)
.padding()
.背景(颜色.红色)
.mask(Circle())/发生这种情况是因为您没有为圆
形状提供固定(或相对)帧,因此圆
占用了最大可用宽度
如果添加一个框架(宽度:高度:)
,则所有内容都应正常工作:
struct PeopleView: View {
let people = ["Adam", "James"]
var body: some View {
NavigationView {
List {
ForEach(people, id: \.self) { person in
HStack {
Circle()
.frame(width: 50, height: 50)
VStack {
Text("\(person)")
}
}
}
}
.navigationBarTitle("People", displayMode: .inline)
}
}
}
这是因为您没有为圆
形状提供固定(或相对)帧,因此圆
占用了最大可用宽度
如果添加一个框架(宽度:高度:)
,则所有内容都应正常工作:
struct PeopleView: View {
let people = ["Adam", "James"]
var body: some View {
NavigationView {
List {
ForEach(people, id: \.self) { person in
HStack {
Circle()
.frame(width: 50, height: 50)
VStack {
Text("\(person)")
}
}
}
}
.navigationBarTitle("People", displayMode: .inline)
}
}
}