Можно ли создать простую коллекцию гибких представлений в SwiftUI с помощью Grid?

То, что я пытаюсь создать, на самом деле очень простой и распространенный компонент. Вот такой дизайн:

Вот код, который я пробовал до сих пор:

      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. Количество может варьироваться от 0..<infinity.
  2. Никогда не должно быть усечено, если только один tag превышает всю ширину сетки.
  3. Количество в ряд может варьироваться в зависимости от ширины tags.
  4. Теги должны быть left-aligned.

Примечание: я бы предпочел родной SwiftUI подход, если это возможно, без импорта каких-либо сторонних библиотек.

0 ответов

Другие вопросы по тегам