GridItem
행이나 열을 나타내는, 하나의 grid 아이템
GridItem 인스턴스를 사용하여
LazyVGrid
나LazyHGrid
의 레이아웃을 구성
- 각각의 grid item은 spacing, alignment같은 레이아웃 특성을 지정
- Grid는 이 특성을 사용해 열 또는 행의 크기와 위치를 지정
GridItem.Size
adaptive(minimum:maximum:)
minimum과 maximum 사이의 사이즈로 열마다 가능한 많은 아이템들을 배치하고자 할 때 사용flexible(minimum:maximum:)
adaptive
와 비슷하지만 열마다 배치되는 item의 수를 조절 가능fixed
item의 개수와 크기를 직접 조절 가능
Lazy키워드에 맞게, 이 Grid view는 아이템이 표시되어야 할 때 생성한다.
아이템은 각 Grid View의 방향에 맞게 추가된다.
(V는 아래로, H는 오른쪽으로)
init(columns: [GridItem],
alignment: HorizontalAlignment = .center,
spacing: CGFloat? = nil,
pinnedViews: PinnedScrollableViews = .init(),
content: () -> Content)
columns
rows
이다.alignment
spacing
pinnedViews
struct ForEach<Data, ID, Content>
where Data : RandomAccessCollection, ID : Hashable
Identified한 데이터 컬렉션으로부터 필요에 따라 View를 계산하는 구조체
RandomAccessCollection
에 기반을 둔 뷰를 제공Identifiable
프로토콜을 채택하거나, 구별 가능한 Key Path를 제공해야 함특정 컬렉션 뷰에 계층을 추가할 때 사용하는 뷰
List
, Picker
, Form
과 같은 리스트를 표시하는 뷰에서 내용을 Section으로 구분 가능struct List<SelectionValue, Content>
where SelectionValue : Hashable, Content : View
하나의 열에 데이터를 표시하는 컨테이너로, 선택적으로 하나 이상의 뷰를 선택할 수 있는 컨테이너
리스트에 들어갈 뷰들을 모두 선언하여 정적인 리스트를 구현 가능
List {
Text("First Item")
Text("Second Item")
Text("Third Item")
}
Identifiable
프로토콜을 채택한 데이터들의 컬렉션으로, 동적인 리스트를 구현 가능
struct Ocean: Identifiable {
let name: String
let id = UUID()
}
private var oceans = [
Ocean(name: "Pacific"),
Ocean(name: "Atlantic"),
Ocean(name: "Indian"),
Ocean(name: "Southern"),
Ocean(name: "Arctic")
]
var body: some View {
List(oceans) {
Text($0.name)
}
}
생성자의 selection:
에 바인딩 가능한 프로퍼티를 넣어 리스트 아이템을 선택 가능
Set
이면 다중 선택 가능기본 refresh control로 데이터를 다시 불러오려면, refreshable(action:)
수정자를 추가
action
에서 데이터를 다시 불러올 때 await
을 사용다중 섹션을 구현하려면 리스트에 Section
인스턴스를 추가
List {
ForEach(...) { _ in
Section(...) {
...
}
}
}
계층 구조를 구현하려면 트리 형태의 데이터를 제공하고, children
파라미터에 하위 노드의 Key Path를 제공해야 함
listStyle(_:)
수정자를 추가하여 리스트의 스타일을 변경 가능 (스타일은 UIKit
의 UITableViewController
의 스타일과 비슷하게 insetGrouped
등이 있다.)
struct ScrollView<Content> where Content : View
스크롤 가능한 뷰 (?)
ScrollViewReader
와 함께 하나 이상의 ScrollView로 Wrap설정 및 인스펙터와 같이 데이터 입력에 사용되는 컨트롤들을 그룹화하는 컨테이너