[SwiftUI] GridView 그리기

J_sung_0o0
Nov 8, 2020

--

서론

위의 이미지처럼 Grid 형태의 뷰를 그리는 방법을 알아보도록 하겠습니다.

두가지 옵션

SwiftUI 에서 Grid 뷰를 그릴 때 두 가지 옵션이 있습니다: LazyVGrid , LazyHGrid

무엇을 선택해야 하나

둘의 차이점은 아이템들이 쌓이는 방향에 있습니다. 위아래로 스크롤 하는 Grid 뷰를 원한다면 LazyVGrid 를 사용하면 되고 좌우로 스크롤 하는 Grid 뷰를 원한다면 LazyHGrid 를 사용하면 됩니다.

(Optional) Lazy ?

SwiftUI 에서는 LazyVStack , LazyHStack , LazyVGrid , LazyHGrid 와 같이 Lazy 라는 이름이 붙은 뷰 빌더들을 볼 수 있습니다. Swift에서 lazy 와 함께 선언된 프로퍼티는처음 호출될 때 값을 계산하기 때문에 필요하지 않는 시간 동안은 값을 생성하지 않습니다. SwifUI 에서 Lazy 라는 이름이 앞에 붙은 뷰 빌더들도 화면에 그려야할 필요가 있는 뷰들에 한해서만 body를 계산합니다. 때문에 화면에 굳이 나타낼 필요가 없는 데이터들을 계산하지 않기 때문에 많은 데이터를 다루는 경우효율적으로 사용될 수 있습니다.

여기서 LazyVGrid 의 경우 화면에 그릴 필요 없는 아이템들은 생성하고 있지 않다가 사용자가 스크롤을 하면서 화면에 그려야하는 시점에 아이템을 생성하게 됩니다.

사용예시

var columns: [GridItem] = [Grid(.fixed(20), Grid(.fixed(20)]ScrollView {
LazyVGrid(columns: columns) {
ForEach(images) {
Image($0)
}
}
}

GridItem ?

GridItem 의 인스턴스들은 LazyVGrid , LazyHGrid 뷰에서 그릴 아이템들의 레이아웃(간격, 정렬, 사이즈등)을 설정하는데에 사용됩니다. (VGrid 의 경우 columns, HGrid의 경우 rows)

.init(GridItem.Size, spacing: CGFloat?, alignment: Alignment?)

GridItem의 Size 에는 3가지 타입이 있습니다.

  • adaptive: (LazyVGrid의 경우) minimum 값 이상의 사이즈로 열마다 가능한 많이 아이템들을 배치하고자 할 때 사용되는 사이즈 입니다.
  • flexible: (LazyVGrid의 경우) minimum 값 이상의 사이즈로 column 수를 조절 하고 싶을 때 사용되는 사이즈 입니다. adaptive와 유사하나 열마다 배치되는 아이템 수를 조절할 수 있다는 점에서 다릅니다.
  • fixed: (LazyVGrid의 경우) column 수와 크기를 직접 조절하고 싶을 때 사용하는 사이즈 입니다.

--

--

J_sung_0o0
J_sung_0o0

Written by J_sung_0o0

Apple WWDC 19 & 20 Winner (The 1st two-time winner of all time from South Korea)

No responses yet