NavigationStack๊ณผ NavigationSplitView์์ ๋ทฐ ์ด๋์ ์ํด NavigationLink๋ฅผ ์ฌ์ฉํ ์ ์๋ค. struct Fruit: Identifiable, Hashable { var id = UUID() let name: String let emoji: String func hash(into hasher: inout Hasher) { hasher.combine(name) } } ๋ฆฌ์คํธ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ์ struct FruitDetailView: View { let fruit: Fruit var body: some View { VStack { Text(fruit.emoji) .font(.largeTitle) Text(fruit.name) } } } ๋ฐ์ดํฐ ..
.overlay( Rectangle() .stroke(PWColor.gray100, lineWidth: 1) ) // .border(PWColor.gray100, width: 1) ์๋border์ ์ฌ์ฉํ๋ฉด frame์ผ๋ก ์ธ์ํ๊ฒ ๋จ. ํด๋น ์์ญ ๊น์ง ์กํ์ VStack์ผ๋ก ์์ผ๋ฉด ์ค๊ฐ์ 2๊ฐ ๋จ
์๋ฌด๋ฆฌ ๋ด๋ ํญ ๋ฐ๊ฐ ๋ง๋๊ฑฐ ๊ฐ์๋ฐ ๋์์ธํ์ด ํ ๊ธ์ด๋ผ ํ๋ ์ฐ์ ํ ๊ธ์ธ๊ฑธ๋ก..!! ๋ญ 2๊ฐ๋ฉด ํ ๊ธ ๋ง์ง! ์๋ฒ๋ก ๋ถํฐ ๋ช ๊ฐ๊ฐ ์ฌ์ง ๋ชจ๋ฅด๊ณ , ํด๋น ์์ญ์ ํญํ์ ๋ ํ ๊ธ ์ ๋๋ฉ์ด์
์ด ์คํ๋์ผ ํ๋ค. Namespace๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฐ์ค๋ฌ์ด ์ ๋๋ฉ์ด์
์ ๊ตฌํํ ์ ์๋ค. ๋ฌผ๋ก animation ์ ์ฌ์ฉํด๋ ๋๋ค! ์ฒ์์ GeometryReader๋ก ์์น๋ฅผ ๊ณ์ฐ ํ ๋ค ํ๋์ View์ ์์น๋ฅผ ๋ณ๊ฒฝํด ์ฃผ์๋๋ offset๊ณผ padding ์ผ๋ก ๋ทฐ ๊ณ์ธต์ ๋ฐ๊ฟจ์ ๋ ์ด์๊ฐ ์์๋ค. GeometryReader๋ก ๊ณ์ฐ ํ ์์น๊ฐ ๋ฌ๋ผ์ ธ์ ์๋ฑํ ๊ณณ์์ ๋ฐฑ๊ทธ๋ผ์ด๋๊ฐ ์์๋๊ณ ์์ง์๋ค. struct CustomToggle: View { let priceList = ["on", "off", "test"] /// ํ ๊ธ ..
struct TipBubbleShape: Shape, InsettableShape { private var insetValue = 0.0 func inset(by amount: CGFloat) -> some InsettableShape { var bubble = self bubble.insetValue = amount return bubble } func path(in rect: CGRect) -> Path { let width = rect.width let height = rect.height let radius = rect.height / 2.0 let midpoint = radius * 0.42 let path = Path { p in p.move(to: CGPoint(x: 25, y: height..
2023.10 ๊ธฐ์ค SwiftUI์์ life cycle updates modifier๋ก ์ง์ ๋ ๊ฒ์ 4๊ฐ์ด๋ค. ์ฌ๊ธฐ์ ๋ง์ง๋ง task๋ task๋ง ๋ฐ๋ก ํ๋ฒ ํ๋ณด๊ธฐ๋ก ํ๊ณ onAppear, onDisappear, task ์์๋ด
์๋ค ๋ค ๋๋ฃจ์~ SwiftUI์์ ํ๋ฉด์ ์ ํํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. UIKit์์ ViewController๋ฅผ ์ฌ์ฉํ์ ๋๋ ํ๋ฉด ์ ํ๋๋ View๋ฅผ ViewController๋ก ๋ช
ํํ ๊ตฌ๋ถํ ์ ์๋ ๋จ์๊ฐ ์์์ง๋ง SwiftUI ์์๋ view๋ผ๋ ๋จ์๊ฐ ๋ช
ํํ๊ฒ ๊ตฌ๋ถ๋์ด ์๊ธฐ ๋ณด๋ค๋ View๊ฐ View๋ฅผ ๊ฐ์ธ๊ณ ์๊ฑฐ๋ ๋ค๋ฅธ View์ ์ผ๋ถ๋ถ์ด ๋ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ณ ๋ คํด์ ์์๋ด์ผ ํ๋ค. ์ฐ์ ๊ฐ modifire์ ๊ฐ๋จํ ์ดํด๋ณด๋ฉด onAppear func o..
๋ฆฌ์คํธ๋ ์๋น์ค ๋๊ณ ์๋ ์ฑ์์ ๋น ์ง์ง ์๊ณ ๋ฑ์ฅํ๋ UI ์ค ํ๋์
๋๋ค. ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ถํฐ ํ๋ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋ ์ผ๋ถ๋ง ๊ฐ์ ธ์จ ๋ค ์ฌ์ฉ์๊ฐ ๊ทธ ์ผ๋ถ๋ฅผ ๋ค ๋ณด๋ฉด ์๋ก์ด ๋ชฉ๋ก์ ์๋ฒ๋ก ๋ถํฐ ๊ฐ์ง๊ณ ์ค๋ ๋ฐฉ์์ด ์๋๋ฐ ์ด๋ฅผ load more ํน์ infinite scroll ์ด๋ผ๊ณ ํฉ๋๋ค. SwiftUI์์๋ ๋ฆฌ์คํธ๋ฅผ ์ํ ์ฌ๋ฌ๊ฐ์ง View๋ค์ด ์ ๊ณต๋ฉ๋๋ค. ๊ทธ ์ค์ VStack์ ์์ดํ
๋ค์ ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์์ต๋๋ค. ์ด VStack์ด ScrollView์ ๋ง๋๋ฉด ์ ํฌ๊ฐ UIKit์์ ๋ณด์๋ UITableView ํน์ UICollectionView์ ๋์ผํ UI๋ฅผ ๊ตฌ์ฑํ ์ ์์ด์. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ LazyVStack์ด๋ผ๋ ๊ฒ์ด ์์ต๋๋ค! ๊ฐ์ ์ด๋์ ์ฌ์ฉํ๋๊ฒ ์ข์๊น์? ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ ๋์ํ๋ ..
๋ค๋น๊ฒ์ด์
์ ๋ค๋ฅธ ์คํฌ๋ฆฐ๊ณผ ๋ทฐ ์ฌ์ด๋ฅผ ์ด๋ํ๊ณ ํ์ํ ์ ์๊ฒ ํด์ค UINavigationController์ ๋ง์ฐฌ๊ฐ์ง๋ก navigationStack์ ๊ด๋ฆฌํ๋ฉฐ NavigationBar ๋ฅผ ์ ๊ณตํ์ฌ ํ๋ฉด๊ฐ ์ด๋์ ์ง์ NavigationView๋ iOS ๊ธฐ์ค 13.0 ~ 17.0 ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ deprecated ์์ ์ด๊ธฐ ๋๋ฌธ์ iOS 16.0 ๋ถํฐ ์ง์ํ๋ ํ๋ก์ ํธ๋ผ๋ฉด NavigationStack์ ์ฌ์ฉ NavigationLink NavigationStack, NavigationSplitView ๋ฟ๋ง ์๋๋ผ NavigationView์์๋ ์ฌ์ฉ ๊ฐ๋ฅ struct NavigationLink where Label : View, Destination : View label์ ํ์ฌ ํ๋ฉด์ ๋ณด์ด๋ ๋ทฐ๋ก์ Navi..
๋์ผํ UI ๊ตฌ์ฑ์ ๊ฐ์ง์ง๋ง ๊ฐ๋ก๋ชจ๋์์ ์ธ๋ก๋ชจ๋๋ก ๋ณ๊ฒฝ๋ ๋ ํ๋ฉด์ ๋์ด๊ฐ ๋ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ํน์ UI์์๋ ํ๋ฉด์ด ๊นจ์ง ์ ์์ด์ ์ด์ ๋์ํด์ผ ํด์. ViewBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํ๋ฉด์์ ๋์ ๊ฐ๋ฅํ View๋ฅผ ์์ฑํ ์ ์์ต๋๋ค! ํน์ ViewBuilder๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํ์ธ์! [SwiftUI] ViewBuilder ์์๋ณด๊ธฐ Definition @resultBuilder struct ViewBuilder ํด๋ก์ ์์ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ์ฉ์ ์ง์ ํ๋ผ๋ฏธํฐ ์์ฑ func contextMenu( @ViewBuilder menuItems: () -> MenuItems ) -> some View ํด๋ก์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด child view๋ฅผ ์์ฑํ๊ณ ์ framios.tis..
'iOS ๐/SwiftUI' ์นดํ
๊ณ ๋ฆฌ์ ๊ธ ๋ชฉ๋ก
๋จ์ถํค
๋ด ๋ธ๋ก๊ทธ
๋ด ๋ธ๋ก๊ทธ - ๊ด๋ฆฌ์ ํ ์ ํ |
Q
Q
|
์ ๊ธ ์ฐ๊ธฐ |
W
W
|
๋ธ๋ก๊ทธ ๊ฒ์๊ธ
๊ธ ์์ (๊ถํ ์๋ ๊ฒฝ์ฐ) |
E
E
|
๋๊ธ ์์ญ์ผ๋ก ์ด๋ |
C
C
|
๋ชจ๋ ์์ญ
์ด ํ์ด์ง์ URL ๋ณต์ฌ |
S
S
|
๋งจ ์๋ก ์ด๋ |
T
T
|
ํฐ์คํ ๋ฆฌ ํ ์ด๋ |
H
H
|
๋จ์ถํค ์๋ด |
Shift + /
โง + /
|
* ๋จ์ถํค๋ ํ๊ธ/์๋ฌธ ๋์๋ฌธ์๋ก ์ด์ฉ ๊ฐ๋ฅํ๋ฉฐ, ํฐ์คํ ๋ฆฌ ๊ธฐ๋ณธ ๋๋ฉ์ธ์์๋ง ๋์ํฉ๋๋ค.