Grid์ ์์ฑ์ ๋ํด์ ์์ธํ ์์๋ณด์.
Grid์ ์ข ๋ฅ : LazyHGrid, LazyVGrid
์์ฑ : fixed, flexible, adaptive
LazyVGrid
๋ฐ์ดํฐ๋ฅผ ์์ง์ผ๋ก ๋์ดํ๊ณ ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
์์ง์ผ๋ก ๋์ดํ๊ธฐ ๋๋ฌธ์ column์ ์ฌ์ฉํฉ๋๋ค. column์ ์ธ๋ก ํ ์ค์ ์๋ฏธํฉ๋๋ค.
var body: some View {
LazyVGrid(columns: columns) {
ForEach(0..<10){num in
Image(systemName: "person")
.resizable()
.aspectRatio(contentMode: .fit)
}
}
}
์์ ์ฝ๋๋ columns๋ผ๋ ํ๋กํผํฐ์ ๊ทธ ์์ฑ์ ๋ด๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง์ ๋ํ ์์ฑ์ ์ง์ ํด์ผ ํฉ๋๋ค.
columns ํ๋กํผํฐ์ ๋ด์ ์์ฑ์ ํฌ๊ฒ ์ธ๊ฐ์ง๊ฐ ์์ต๋๋ค.
fixed
๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํด์ ๋ณด์ฌ์ค๋๋ค.
์์ ์ฝ๋๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ 50์ผ๋ก ๊ณ ์ ํ์์ต๋๋ค.
var columns: [GridItem] {
[GridItem(.fixed(50))]
}
๋ณด์๋ค์ํผ column์ ์ธ๋ก ํ ์ค์ ์๋ฏธํฉ๋๋ค. ์ฌ๋ฌ์ค์ ๋ํ๋ด๊ณ ์ถ๋ค๋ฉด []์ GridItem()์ ์ฌ๋ฌ๊ฐ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
์ธ์ค, ๋ค์ค์ ๋ํ๋ด๊ณ ์ถ์ผ๋ฉด GridItem์ ๋ ์ถ๊ฐํ๋ฉด ๋๊ฒ ์ฃ ?!
var columns: [GridItem] {
[GridItem(.fixed(50)),
GridItem(.fixed(50))]
}
column๋ง๋ค ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ๋ํ๋ผ ์ ์์ต๋๋ค.
var columns: [GridItem] {
[GridItem(.fixed(30)),
GridItem(.fixed(50))]
}
flexible
์ด๋ฆ๋๋ก ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ํฉ๋๋ค.
minimum๊ฐ๊ณผ maximum๊ฐ์ ๊ฐ์ง๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก maximum๊ฐ์ ๋ฐ๋ฆ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ minimum๊ฐ์ ์๋ตํด๋ ๋ฉ๋๋ค!
var columns: [GridItem] {
//[GridItem(.flexible(minimum: 10,maximum: 200))]
[GridItem(.flexible(maximum: 200))]
}
์ฌ๋ฌ์ค๋ก ๋ง๋ค๋ฉด ์ ์ฐํ๊ฒ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค. ์ต์ํ์ผ๋ก ์ค์ ๋๋ค.
var columns: [GridItem] {
[GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200))]
}
adaptive
ํฌ๊ธฐ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ํ๋ค๋ ์ ์์ flexible๊ณผ ์ ์ฌํ์ง๋ง ๋ช ํํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์ฐ์ adaptive๋ minimum๊ฐ์ ๋ฐ๋ฅธ๋ค๋ ๊ฒ์ ๋๋ค. (๊ทธ๋ ๊ธฐ ๋๋ฌธ์ maximum๊ฐ์ ์๋ต์ด ๊ฐ๋ฅํฉ๋๋ค.)
๋, adaptive๋ GridItem์์ฑ์ด ํ๋๋ผ๋ ํ๋ฉด์ ์ต๋ํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ๋ฌ์ค์ ๊ฑฐ์ณ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
var columns: [GridItem] {
//[GridItem(.adaptive(minimum: 50, maximum: 200))]
[GridItem(.adaptive(minimum: 50))]
}
daptive๋ ๋ด๊ฐ ์ง์ ํ ์ปฌ๋ผ์ ๊ฐฏ์์ ๋ฌด๊ดํ๊ฒ ์ฌ๋ฌ์ค์ ๊ฑฐ์ณ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ์ฝ๋๋ ํฐ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ปฌ๋ผ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์๊ณ view์ ํฌ๊ธฐ๋ฅผ ๊ฐฏ์๋งํผ ์ผ์ ํ๊ฒ ์นธ์ ๋๋์ด ๋ฐ์ดํฐ์ ์์ฑ์ ์ ์ฉ์ํต๋๋ค.
var columns: [GridItem] {
[GridItem(.adaptive(minimum: 50)),
GridItem(.adaptive(minimum: 10)),
GridItem(.adaptive(minimum: 30)),
GridItem(.adaptive(minimum: 50))]
}
LazyHGrid
๋ฐ์ดํฐ๋ฅผ ์ํ์ผ๋ก ๋์ดํ๊ณ ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
์ํ์ผ๋ก ๋์ดํ๊ธฐ ๋๋ฌธ์ rows๋ฅผ ์ฌ์ฉํฉ๋๋ค. rows๋ ๋ฐ์ดํฐ ํ ์ค์ ์๋ฏธํฉ๋๋ค.
LazyHGrid(rows: rows) {
ForEach(0..<50){num in
Image(systemName: "person")
.resizable()
.aspectRatio(contentMode: .fit)
}
}
์์ ์ฝ๋๋ rows๋ผ๋ ํ๋กํผํฐ์ ๊ทธ ์์ฑ์ ๋ด๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง์ ๋ํ ์์ฑ์ ์ง์ ํด์ผ ํฉ๋๋ค.
VGrid์ columns๊ณผ ๋์ผํ๊ฒ rows๋ ์ธ๊ฐ์ง ์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
fixed
var rows: [GridItem] {
[GridItem(.fixed(50))]
}
๊ธฐ๋ณธ์ ์ผ๋ก rows๋ ๊ฐ๋ก ํ ์ค๋ก ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ ๋๋ค.
VGrid์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๋ฌ์ค์ ๋ํ๋ด๊ณ ์ถ๋ค๋ฉด []์ GridItem()์ ์ฌ๋ฌ๊ฐ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
var rows: [GridItem] {
[GridItem(.fixed(50)),
GridItem(.fixed(50))]
}
row๋ง๋ค ๋ค๋ฅธ ํฌ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ผ ์๋ ์์ต๋๋ค.
var rows: [GridItem] {
[GridItem(.fixed(30)),
GridItem(.fixed(20)),
GridItem(.fixed(10))]
}
flexible
var rows: [GridItem] {
[GridItem(.flexible(maximum: 200))]
}
5์ค์ ๋ค ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํฌ๊ธฐ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ํฉ๋๋ค.
var rows: [GridItem] {
[GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200)),
GridItem(.flexible(maximum: 200))]
}
adaptive
๊ฐ๋ก์ค์ ๊ฐฏ์๊ฐ ๋ด๊ฐ ์ง์ ํ ๊ฒ๊ณผ ์๊ด์์ด ์ต๋ํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค ์ ์๋๋ก ๋์ดํฉ๋๋ค.
var rows: [GridItem] {
[GridItem(.adaptive(minimum: 50))]
}
'๐ฑ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] TabView ํ์ด์ง ์ด๋์ TabBar , NavigationBar Hidden ์ฒ๋ฆฌํ๊ธฐ (0) | 2022.08.14 |
---|---|
๋๋ฐ์ด์ค ํ๋ฉด๊ณ ์ portrait only (0) | 2022.07.25 |
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (2) (0) | 2022.07.04 |
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (1) (0) | 2022.06.28 |
Auto Layout 1 [Why?] (0) | 2022.05.31 |