SwiftUI 配置 LazyVGrid 无间距 [英] SwiftUI configure LazyVGrid with no spacing

查看:44
本文介绍了SwiftUI 配置 LazyVGrid 无间距的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个没有空格或空间较小的单元格网格,就像照片应用程序一样,SwiftUI 2 LazyVGrid 可以吗?我试过了,但列之间总是有这个空间.

I wanted to create a grid of cells with no spaces or smaller space just like the Photos app, is it possible with SwiftUI 2 LazyVGrid? I've tried it but there is always this space in-between columns.

在文档中,spacing 参数被描述为:

In the documentation, the spacing parameter is described as:

间距网格与其父视图中的下一项之间的间距.

spacing The spacing beween the grid and the next item in its parent view.

这没有多大意义,你不能只使用 padding 吗?此外,当我尝试增加间距时,它似乎实际上影响了单元格行之间的空间,这更加出乎意料.

Which doesn't make much sense, can't you just use padding for that? Also, when I tried increasing the spacing, it seems to be actually impacting the space in-between rows of cells, which is even more unexpected.

推荐答案

你在 LazyVGrid 中给 spacing: 0 设置垂直间距,spacing: 0<GridItem 中的/code> 用于水平间距.

You give spacing: 0 in LazyVGrid for vertical spacing, and spacing: 0 in GridItem for horizontal spacing.

这是一个演示.使用 Xcode 12/iOS 14 测试

Here is a demo. Tested with Xcode 12 / iOS 14

struct TestImagesInGrid: View {
    @State private var imageNames: [String]

    private let threeColumnGrid = [
        GridItem(.flexible(minimum: 40), spacing: 0),
        GridItem(.flexible(minimum: 40), spacing: 0),
        GridItem(.flexible(minimum: 40), spacing: 0),
    ]

    init() {
        _imageNames = State(initialValue: (0..<8).map { _ in
            "image_\(Int.random(in: 1...3))"
        })
    }

    var body: some View {
        LazyVGrid(columns: threeColumnGrid, alignment: .leading, spacing: 0) {
            ForEach(imageNames.indices) { i in
                Image(imageNames[i]).resizable()
                    .aspectRatio(1, contentMode: .fill)
                    .border(Color.black)
            }
        }
    }
}

这篇关于SwiftUI 配置 LazyVGrid 无间距的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆