Skip to content

Commit 2781322

Browse files
committed
Add LazyVGrid case study
1 parent 195dd79 commit 2781322

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

ViewLifecycle.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
5D0520B72934DC330080E4C0 /* CaseStudyStaticList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0520B62934DC330080E4C0 /* CaseStudyStaticList.swift */; };
11+
5D0520B92934E6130080E4C0 /* CaseStudyLazyVGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0520B82934E6130080E4C0 /* CaseStudyLazyVGrid.swift */; };
1112
5D305D20293240F300E42700 /* OnAppearMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D305D1F293240F300E42700 /* OnAppearMonitor.swift */; };
1213
5D305D222932444500E42700 /* CaseStudyScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D305D212932444500E42700 /* CaseStudyScrollView.swift */; };
1314
5D305D242932547F00E42700 /* CaseStudyList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D305D232932547F00E42700 /* CaseStudyList.swift */; };
@@ -22,6 +23,7 @@
2223

2324
/* Begin PBXFileReference section */
2425
5D0520B62934DC330080E4C0 /* CaseStudyStaticList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaseStudyStaticList.swift; sourceTree = "<group>"; };
26+
5D0520B82934E6130080E4C0 /* CaseStudyLazyVGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaseStudyLazyVGrid.swift; sourceTree = "<group>"; };
2527
5D305D1F293240F300E42700 /* OnAppearMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnAppearMonitor.swift; sourceTree = "<group>"; };
2628
5D305D212932444500E42700 /* CaseStudyScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaseStudyScrollView.swift; sourceTree = "<group>"; };
2729
5D305D232932547F00E42700 /* CaseStudyList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaseStudyList.swift; sourceTree = "<group>"; };
@@ -67,6 +69,7 @@
6769
isa = PBXGroup;
6870
children = (
6971
5D6C3F6B2908541100A0C864 /* App.swift */,
72+
5D0520B82934E6130080E4C0 /* CaseStudyLazyVGrid.swift */,
7073
5D305D232932547F00E42700 /* CaseStudyList.swift */,
7174
5D305D25293260BE00E42700 /* CaseStudyScrollViewVStackForEach.swift */,
7275
5D305D212932444500E42700 /* CaseStudyScrollView.swift */,
@@ -160,6 +163,7 @@
160163
isa = PBXSourcesBuildPhase;
161164
buildActionMask = 2147483647;
162165
files = (
166+
5D0520B92934E6130080E4C0 /* CaseStudyLazyVGrid.swift in Sources */,
163167
5D0520B72934DC330080E4C0 /* CaseStudyStaticList.swift in Sources */,
164168
5D305D2A293266D000E42700 /* CaseStudyTabView.swift in Sources */,
165169
5D305D28293260EC00E42700 /* Model.swift in Sources */,
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import SwiftUI
2+
3+
struct CaseStudyLazyVGrid: View {
4+
@State private var items: [Item] = sampleItems
5+
6+
var body: some View {
7+
ScrollView {
8+
LazyVGrid(columns: [.init(.adaptive(minimum: 280))]) {
9+
ForEach(items) { item in
10+
let label = String(item.id.uuidString.prefix(8))
11+
OnAppearMonitor(label: label)
12+
}
13+
}
14+
}
15+
.navigationTitle("LazyVGrid")
16+
.toolbar {
17+
ToolbarItem {
18+
Button("Prepend") {
19+
let newItem = Item(id: UUID())
20+
items.insert(newItem, at: 0)
21+
}
22+
}
23+
ToolbarItem {
24+
Button("Append") {
25+
let newItem = Item(id: UUID())
26+
items.append(newItem)
27+
}
28+
}
29+
}
30+
.animation(.default, value: items)
31+
}
32+
}
33+
34+
struct CaseStudyLazyVGrid_Previews: PreviewProvider {
35+
static var previews: some View {
36+
CaseStudyLazyVGrid()
37+
}
38+
}

ViewLifecycle/RootView.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ extension CaseStudy {
3131
label: "List with dynamic content",
3232
description: "List recycles views during scrolling, so onAppear gets called often. But List preserves the State for all list items."
3333
)
34+
static let lazyVGrid: Self = .init(
35+
id: "lazyVGrid",
36+
label: "LazyVGrid"
37+
)
3438
static let tabView: Self = .init(
3539
id: "tabView",
3640
label: "TabView",
@@ -56,7 +60,14 @@ let categories: [Category] = [
5660
]
5761
),
5862
Category(
59-
id: "tabview",
63+
id: "lazy",
64+
label: "Lazy Containers",
65+
elements: [
66+
.lazyVGrid,
67+
]
68+
),
69+
Category(
70+
id: "tabView",
6071
label: "TabView",
6172
elements: [
6273
.tabView,
@@ -123,6 +134,8 @@ struct Primary: View {
123134
CaseStudyStaticList()
124135
case .list:
125136
CaseStudyList()
137+
case .lazyVGrid:
138+
CaseStudyLazyVGrid()
126139
case .tabView:
127140
CaseStudyTabView()
128141
default:

0 commit comments

Comments
 (0)