首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于创建遍历数组的SwiftUI列表来说,它们比为每个VStack循环更好的方法吗?

对于创建遍历数组的SwiftUI列表来说,它们比为每个VStack循环更好的方法吗?
EN

Stack Overflow用户
提问于 2022-12-03 03:43:05
回答 2查看 28关注 0票数 1

我试图创建一个在第一列之后水平滚动的表,我对每一列都有一个for循环,以便从数组中获取数据。我知道这不是正确的方法,因为我要循环同一个数组多少次,但我想不出一个更好的解决方案。

代码语言:javascript
运行
复制
    struct SampleData: Identifiable {
      let id = UUID()
      let Entity: String
      let address1: String
      let address2: String
      let city: String
      let state: String
      let zip: Int
      let website: String
      let billToName: String
      let billable: Bool
      let hours: String
      let accountNo: Int
      let BillToEntity: String
      let email: String

    }

    let datas = [
      SampleData(
        Entity: "Entity 1", address1: "1234 N. Main", address2: "Suite 200", city: "austin",
        state: "TX", zip: 12345, website: "www.website.com", billToName: "Test Name 1", billable: false,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 1",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 2", address1: "5678 N. Main", address2: "Suite 300", city: "livingston",
        state: "TX", zip: 12345, website: "www.website.com", billToName: "Test Name 2", billable: false,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 2",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 3", address1: "90025 N. Main", address2: "Suite 400", city: "houston",
        state: "TX", zip: 12345, website: "www.website.com", billToName: "Test Name 3", billable: true,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 3",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 4", address1: "4456 N. Main", address2: "Suite 500", city: "spring",
        state: "TX", zip: 12345, website: "www.website.com", billToName: "Test Name 4", billable: true,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 4",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 5", address1: "4456 N. Main", address2: "Suite 500", city: "spring",
        state: "TX", zip: 12345, website: "www.website.com", billToName: "Test Name 4", billable: true,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 4",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 6", address1: "56 N. Main", address2: "Suite 500", city: "spring", state: "TX",
        zip: 12345, website: "www.website.com", billToName: "Test Name 4", billable: false,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 4",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 7", address1: "4456 N", address2: "Suite 500", city: "spring", state: "TX",
        zip: 12345, website: "www.website.com", billToName: "Test Name 4", billable: true,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 4",
        email: "test@test.com"),
      SampleData(
        Entity: "Entity 8", address1: "44 Main", address2: "Suite 500", city: "spring", state: "TX",
        zip: 12345, website: "www.website.com", billToName: "Test Name 4", billable: true,
        hours: "8-5 M-F", accountNo: 123_456_789, BillToEntity: "Bill To Entity 4",
        email: "test@test.com"),
    ]
代码语言:javascript
运行
复制
    struct TablesView: View {
      @State var billable = false

      var body: some View {

        HStack (alignment: .top){
          VStack {
            Text("Entity")
             
            HStack(spacing: 16) {

              VStack {
                ForEach(datas) { val in
                  Text(val.Entity)
                }
              }

            }
          }

          ScrollView(.horizontal) {
            HStack(alignment: .top) {

              VStack {

                VStack {
                  Text("Address1")
                  ForEach(datas) { val in
                    Text(val.address1)
                  }
                }
              }
              VStack {

                VStack {
                  Text("Address2")
                  ForEach(datas) { val in
                    Text(val.address2)
                  }
                }
              }
              VStack {

                VStack {
                  Text("City")
                  ForEach(datas) { val in
                    Text(val.city)
                  }
                }
              }
              VStack {

                VStack {
                  Text("State")
                  ForEach(datas) { val in
                    Text(val.state)
                  }
                }
              }
              VStack {

                VStack {
                  Text("Zip")
                  ForEach(datas) { val in
                    Text(String(val.zip))
                  }
                }
              }
              VStack {

                VStack {
                  Text("Website")
                  ForEach(datas) { val in
                    Text(val.website)
                  }
                }
              }
              VStack {

                VStack {
                  Text("Bill To")
                  ForEach(datas) { val in
                    Text(val.billToName)
                  }
                }
              }
              VStack {

                VStack {
                  Text("Billable")
                  ForEach(datas) { val in

                    Image(systemName: val.billable ? "checkmark.square.fill" : "square")
                      .foregroundColor(val.billable ? Color(UIColor.systemBlue) : Color.secondary)
                      .onTapGesture {
                        self.billable.toggle()
                      }
                  }
                }
              }
            }
          }
        }
      }
    }

具有水平滚动的列表

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-12-03 04:03:29

使用Grid可以使这种情况变得更好。这里没有把整件事都打出来,但你知道

代码语言:javascript
运行
复制
        ScrollView(.horizontal) {
            Grid(alignment: .leading) {
                GridRow {
                    Text("Address 1")
                    Text("Address 2")
                    Text("city")
                }
                
                ForEach(datas) { data in
                    GridRow {
                        Text(data.address1)
                        Text(data.address2)
                        Text(data.city)
                    }
                }
            }
        }

票数 0
EN

Stack Overflow用户

发布于 2022-12-03 19:08:56

SwiftUI已经有了一个内置的Table

代码语言:javascript
运行
复制
var body: some View {
    Table(datas) {
        TableColumn("Address 1", value: \.address1)
        TableColumn("Address 2", value: \.address2)
        TableColumn("City", value: \.city)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74663827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档