Ir al contenido
Skip

Grid

Esta página aún no está disponible en tu idioma.

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)
}
}
}