首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择器内部的LazyVGrid,使用SwiftUI

选择器内部的LazyVGrid,使用SwiftUI
EN

Stack Overflow用户
提问于 2021-12-24 04:42:48
回答 1查看 265关注 0票数 1

在下面的代码中,选择器工作得很好,但是LazyVGrid只显示为一列(应该是三列,如pickColorTable var中所示)。

代码语言:javascript
复制
var pickColorTable:[GridItem] = Array(repeating: .init(.flexible(), spacing: 5), count: 3)

Form {
      LazyVGrid(columns: pickColorTable, spacing: 5) {
          Picker("Color", selection: $pickColor) {
            ForEach(colorTable, id: \.self) { color in
                  Rectangle()
                     .frame(width: 70, height: 70)
                     .foregroundColor(Color(color))
                      .cornerRadius(20)
             }
          }
       }
   }

另一方面,如果第二行与第三行交换,如下面的代码所示,LazyVGrid将正确呈现,但选择器停止工作(当我单击所需的颜色时什么都不会发生)。

代码语言:javascript
复制
 Form {
      Picker("Color", selection: $pickColor) {
          LazyVGrid(columns: pickColorTable, spacing: 5) {
            ForEach(colorTable, id: \.self) { color in
                  Rectangle()
                     .frame(width: 70, height: 70)
                     .foregroundColor(Color(color))
                      .cornerRadius(20)
             }
          }
       }
   }

有谁有提示让LazyVGrid在选择器内正常工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-24 11:19:01

问题是,你的选择器的内容是一个LazyVGrid,而不是一个Rectangle的列表,你可以做的就是给每个矩形添加一个点击手势。然后手动地变异pickColor,例如

代码语言:javascript
复制
Form {
    Picker("Color", selection: $pickColor) {
      LazyVGrid(columns: pickColorTable, spacing: 5) {
            ForEach(colorTable, id: \.self) { color in
              Rectangle()
                .frame(width: 70, height: 70)
                .foregroundColor(Color(color))
                .cornerRadius(20)
                .onTapGesture {
                  pickColor = color
                }
            }
          }
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70469626

复制
相关文章

相似问题

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