2

我正在尝试构建的是非常简单和通用的组件。这是设计:

设计

这是我到目前为止尝试过的代码:

struct ContentView: View {
    var tags: [String]

    var body: some View {
        LazyVGrid(columns: [GridItem(.flexible(minimum: 0, maximum: .infinity)),
                            GridItem(.flexible(minimum: 0, maximum: .infinity))]) {
            ForEach(tags, id: \.self) { tag in
                Button(action: { print(tag) }) {
                    Text(tag.title)
                        .lineLimit(1)
                        .padding(.vertical, 8)
                        .padding(.horizontal)
                        .overlay(
                            RoundedRectangle(cornerRadius: 4)
                                .stroke(Color.primaryViolet, lineWidth: 2)
                        )
                }
            }
        }
    }
}

这是我得到的:

在此处输入图像描述

以下是一些额外的细节:

  1. 数量tags可能从0..<infinity.
  2. tag除非单个超出网格的整个宽度,否则不应被截断。
  3. 每行的数量tags可以根据 的宽度而变化tags
  4. 标签必须是left-aligned.

注意:如果可能的话,我更喜欢本机SwiftUI方法,而不导入任何 3rd 方库。

4

0 回答 0