Skip Fuse is now free for indie developers!
skip.tools logo

Grid

Skip support for SwiftUI.Grid.

The following example screens and source code is from SkipUI’s Showcase sample app GridPlayground.swift

import SwiftUI
struct GridPlayground: View {
 var body: some View {
 ScrollView {
 VStack(spacing: 16) {
 NavigationLink("LazyVGrid .adaptive") {
 LazyVGridAdaptiveView()
 .navigationTitle("LazyVGridView")
 }
 NavigationLink("LazyVGrid .flexible") {
 LazyVGridFlexibleView()
 .navigationTitle("LazyVGridView")
 }
 NavigationLink("LazyVGrid .fixed") {
 LazyVGridFixedView()
 .navigationTitle("LazyVGridView")
 }
 NavigationLink("LazyVGrid .trailing") {
 LazyVGridTrailingView()
 .navigationTitle("LazyVGridView")
 }
 NavigationLink("LazyVGrid sectioned") {
 LazyVGridSectionedView()
 .navigationTitle("LazyVGridView")
 }
 NavigationLink("LazyVGrid refreshable") {
 LazyVGridRefreshableView()
 .navigationTitle("Refreshable")
 }
 NavigationLink("LazyHGrid .adaptive") {
 LazyHGridAdaptiveView()
 .navigationTitle("LazyHGridView")
 }
 NavigationLink("LazyHGrid .flexible") {
 LazyHGridFlexibleView()
 .navigationTitle("LazyHGridView")
 }
 NavigationLink("LazyHGrid .fixed") {
 LazyHGridFixedView()
 .navigationTitle("LazyHGridView")
 }
 NavigationLink("LazyHGrid .bottom") {
 LazyHGridBottomView()
 .navigationTitle("LazyHGridView")
 }
 NavigationLink("LazyHGrid sectioned") {
 LazyHGridSectionedView()
 .navigationTitle("LazyHGridView")
 }
 NavigationLink("LazyVGrid .padding") {
 LazyVGridPaddingView()
 .navigationTitle("LazyVGridView")
 }
 }
 .padding()
 }
 .toolbar {
 PlaygroundSourceLink(file: "GridPlayground.swift")
 }
 }
}
private struct LazyVGridAdaptiveView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.adaptive(minimum: 80))]) {
 ForEach(0..<100) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(height: 80)
 }
 }
 }
 }
}
private struct LazyVGridFlexibleView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())]) {
 ForEach(0..<50) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(height: 80)
 ZStack {
 Color.green
 Text(String(describing: index))
 }
 .frame(height: 80)
 }
 }
 }
 }
}
private struct LazyVGridFixedView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.fixed(80)), GridItem(.fixed(80)), GridItem(.fixed(80)), GridItem(.fixed(80))]) {
 ForEach(0..<25) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(height: 80)
 ZStack {
 Color.green
 Text(String(describing: index))
 }
 .frame(height: 80)
 ZStack {
 Color.pink
 Text(String(describing: index))
 }
 .frame(height: 80)
 ZStack {
 Color.orange
 Text(String(describing: index))
 }
 .frame(height: 80)
 }
 }
 }
 }
}
private struct LazyVGridTrailingView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.adaptive(minimum: 80), alignment: .trailing)]) {
 ForEach(0..<100) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(width: 40, height: 40)
 }
 }
 }
 }
}
private struct LazyVGridSectionedView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.adaptive(minimum: 80))]) {
 ForEach(0..<5) { index in
 Section {
 ForEach(0..<10) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(height: 80)
 }
 } header: {
 Text("Section \(index) Header")
 } footer: {
 Text("Section footer")
 }
 }
 }
 }
 }
}
private struct LazyVGridRefreshableView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.adaptive(minimum: 80))]) {
 ForEach(0..<100) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(height: 80)
 }
 }
 }
 .refreshable {
 do { try await Task.sleep(nanoseconds: 3_000_000_000) } catch { }
 }
 }
}
private struct LazyHGridAdaptiveView: View {
 var body: some View {
 ScrollView(.horizontal) {
 LazyHGrid(rows: [GridItem(.adaptive(minimum: 80))]) {
 ForEach(0..<100) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(width: 80)
 }
 }
 }
 }
}
private struct LazyHGridFlexibleView: View {
 var body: some View {
 ScrollView(.horizontal) {
 LazyHGrid(rows: [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())]) {
 ForEach(0..<50) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(width: 80)
 ZStack {
 Color.green
 Text(String(describing: index))
 }
 .frame(width: 80)
 }
 }
 }
 }
}
private struct LazyHGridFixedView: View {
 var body: some View {
 ScrollView(.horizontal) {
 LazyHGrid(rows: [GridItem(.fixed(80)), GridItem(.fixed(80)), GridItem(.fixed(80)), GridItem(.fixed(80))]) {
 ForEach(0..<25) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(width: 80)
 ZStack {
 Color.green
 Text(String(describing: index))
 }
 .frame(width: 80)
 ZStack {
 Color.pink
 Text(String(describing: index))
 }
 .frame(width: 80)
 ZStack {
 Color.orange
 Text(String(describing: index))
 }
 .frame(width: 80)
 }
 }
 .frame(height: 400)
 }
 }
}
private struct LazyHGridBottomView: View {
 var body: some View {
 ScrollView(.horizontal) {
 LazyHGrid(rows: [GridItem(.adaptive(minimum: 80), alignment: .bottom)]) {
 ForEach(0..<100) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(width: 40, height: 40)
 }
 }
 }
 }
}
private struct LazyHGridSectionedView: View {
 var body: some View {
 ScrollView(.horizontal) {
 LazyHGrid(rows: [GridItem(.adaptive(minimum: 80))]) {
 ForEach(0..<5) { index in
 Section {
 ForEach(0..<10) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(width: 80)
 }
 } header: {
 Text("Section \(index) Header")
 } footer: {
 Text("Section footer")
 }
 }
 }
 }
 }
}
private struct LazyVGridPaddingView: View {
 var body: some View {
 ScrollView {
 LazyVGrid(columns: [GridItem(.adaptive(minimum: 80))]) {
 ForEach(0..<100) { index in
 ZStack {
 Color.yellow
 Text(String(describing: index))
 }
 .frame(height: 80)
 }
 }
 .padding(32)
 }
 }
}

AltStyle によって変換されたページ (->オリジナル) /