Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在SwiftUI的列表行中添加形状_Ios_Swiftui_Swiftui List - Fatal编程技术网

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)
        }
    }
}