🗒️

【SwiftUI】LazyHGridの使用方法

2022/02/10に公開

はじめに

LazyVGridやLazyHGridを使用するとGridを作成することができます。
今回はLazyHGridの使用方法について紹介したいと思います。
(LazyVGridに関してはこちら)

環境

・ macOS: Monterey
・ Xcode: 13.2

公式ドキュメントを試す

まずは公式のドキュメントでコードが公開されているので試してみます。

var rows: [GridItem] =
        Array(repeating: .init(.fixed(20)), count: 2)
ScrollView(.horizontal) {
    LazyHGrid(rows: rows, alignment: .top) {
        ForEach((0...79), id: \.self) {
            let codepoint = $0 + 0x1f600
            let codepointString = String(format: "%02X", codepoint)
            Text("\(codepointString)")
                .font(.footnote)
            let emoji = String(Character(UnicodeScalar(codepoint)!))
            Text("\(emoji)")
                .font(.largeTitle)
        }
    }
}

横にスクロールができて、一定間隔で絵文字のコード+絵文字が表示されます。
LazyVGridと比べると横へのGridになるのでScrollView(.horizontal)で使用する点やcolumnsからrowsで使用する点は縦軸と横軸の違いを感じます。その他は使用感としてはほぼ同じ印象です。

その他

let data = Array(1...100).map { "Index\($0)" }
let layout = [
    GridItem(.flexible(maximum: 80)),
    GridItem(.flexible(maximum: 100)),
    GridItem(.flexible(maximum: 150))
]
var body: some View {
    ScrollView(.horizontal) {
        LazyHGrid(rows: layout, spacing: 10) {
            ForEach(data, id: \.self) { item in
                LazyVStack {
                    Text("\(item)")
                    Rectangle()
                        .frame(height: 5)
                }
            }
        }
    }
}

layout内にあるGridItem(.flexible)の数が行数になります。またmaximumで指定したサイズは幅に影響します。横幅を指定したい場合はLazyVStackに対してframeでサイズを指定するとできます。

まとめ

LazyVGridと使用感は似ているので違和感なく使用できます。
写真など横にスクロールするViewでの活躍などがありそうだなと思いました。

Discussion