繁体   English   中英

在 SwiftUI 的列表行中添加形状

[英]Adding shapes in List row of SwiftUI

我正在尝试创建一个列表视图,其中行如下所示:

在此处输入图像描述

但是,我无法在领先侧对齐Circle 尝试在VStack中使用Spacer()HStack ,它只是不起作用。 这是我的代码及其 output。

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

推

实际上,在这种情况下,您不需要形状本身,而只是作为以圆形视觉呈现文本的蒙版。

所以解决方案可以如下

演示

HStack {
    Text(person.prefix(2).uppercased()).bold()
        .foregroundColor(.white)
        .padding()
        .background(Color.red)
        .mask(Circle())          // << shaping text !!

    Spacer()
    VStack {
        Text("\(person)")
    }
}

SwiftUI 中的一些视图填满了所有可用空间。 此类视图是形状、colors、垫片、分隔线和GeometryReader

你的Circle是一个形状,它的行为类似于Spacer (就填充空间而言)。

如果您将Circle替换为圆形图像,它将起作用:

ForEach(people, id: \.self) { person in
    HStack {
        Image(systemName: "circle.fill")
            .imageScale(.large)
        Spacer()
        VStack {
            Text("\(person)")
        }
    }
}

发生这种情况是因为您没有为Circle形状提供固定(或相对)框架,因此Circle占用了最大可用宽度。

如果你添加一个frame(width:height:) ,一切都应该正常工作:

预期结果

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM