【问题标题】:Fetch ScrollView Element Number SwiftUI获取 ScrollView 元素编号 SwiftUI
【发布时间】:2020-12-15 11:38:34
【问题描述】:

我想根据单元格的编号更改ArticleListElementView。例如我在ScrollView 中有 10 个单元格,如果单元格编号为奇数,则显示 Rectangle(),如果单元格编号为偶数,则为 0 2 4 6 8,则隐藏 Rectangle()。所以我想我可以在ForEach() 中将cellNumber var 增加1,但它给了我一个错误。那么我该怎么做呢?

struct ArticleView: View {
@ObservedObject var service = ArticleService()
var cellNumber: Int = 0
var body: some View {
ScrollView(.vertical, showsIndicators: false) {
                        LazyVGrid(columns: columns, spacing:0) {
                            ForEach(service.articlePost, id: \.article_id) { post in
                                ArticleListElementView(articlePost: post)
                                    .onTapGesture {
                                        self.shown = true
                                        self.selectedArticle = post
                                    }
                                cellNumberRead()
                            }
                        }
                     }
                   }

func cellNumberRead() {
        cellNumber = cellNumber + 1
    }

struct ArticleListElementView: View {
    var articlePost: ArticlePost
    var body: some View {
        ZStack{
            Color("Background")
                .edgesIgnoringSafeArea(.all)
            HStack {
                //                if articlePost.cellNumber == I want to check cellNumber in here and draw a line else do not draw rectangle
                Rectangle()
                    .frame(width: 0.5, height: width)
        }

这是错误

【问题讨论】:

  • 我添加了错误截图。
  • 如果我删除 cellNumberRead() 那么它工作正常。
  • 看,Asperi 知道该怎么做。不要责怪我的编码技巧=)

标签: swiftui cell increment


【解决方案1】:

您可以枚举数据并将索引直接注入行视图,例如

ForEach(Array(service.articlePost.enumerated()), id: \.1.article_id) { i, post in
    ArticleListElementView(articlePost: post, cellNumber: i)   // << here !!

现在根据需要在 ArticleListElementView 中使用

struct ArticleListElementView: View {
    var articlePost: ArticlePost
    var cellNumber: Int

    var body: some View {
        ZStack{
            Color("Background")
                .edgesIgnoringSafeArea(.all)
            HStack {
                if cellNumber % 2 == 0 {
                   // .. your code
                } else {
                   // .. another case
                }

【讨论】:

猜你喜欢
  • 2020-07-16
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多