๐ ์ธ์ฑ๋ฆฌ๋ทฐ(In-App Review) ์ด๋ฒ์ ํํ๋ก์ ํธ์ ๊ฐ๋ฐ์์์ด ์กฐ๊ธ์ฉ ๊ณ์ ๋ฏธ๋ค์ง๋ฉด์, ๊ฐ๋ฐํ๊ณ ์ถ์๋ฐ ํ์ง๋ชปํด์ ์ต๊ทผ์ ์กฐ๊ธ์ฉ ์ ๋ฐ์ดํธํ๊ณ ์๋ ๊ฐ์ธํ๋ก์ ํธ ์ฑ์ ์ธ์ฑ๋ฆฌ๋ทฐ๋ฅผ ๋ฃ์ด๋ณด์์ต๋๋ค. ์ธ์ฑ๋ฆฌ๋ทฐ๋ ์ฑ ๋ด์์ ์ฑ์ ์ฑ์คํ ์ด ํ์ ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ธธ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.์ฌ์ค ์ ๊ฐ ์ด๊ฑธ ์ ์ฉํ๋ ค๋ ์ฑ์ด ์ฌ์ฉ์๊ฐ ๋ง์ง ์์ง๋ง ๊พธ์คํ ์ฌ์ฉํ๊ณ ์๋ ์ฌ๋์ด ์์ต๋๋ค. ๊ทผ๋ฐ ํ์ฅ์ฑ์ด ๋์ง ์์ ๋จ์ผ ๊ธฐ๋ฅ ์ฑ์ด๋ผ.. ํ์ฅ์ ํ๋ค๋ฉด ์์ฒญ ํฌ๊ฒ ํด์ผํด์ ์ฌ์ฉ์๊ฐ ์๊ฒฌ์ด๋ ํผ๋๋ฐฑ์ ์กฐ๊ธ ๋ ๋ค์ด๋ณด๊ณ ์ถ์ด์ ์ ์ฉํ๋ คํฉ๋๋ค. ์ ๊ฐ SwiftUI๋ฅผ ์ฒ์ ๊ณต๋ถํ ๋, ์ ๊ฐ ์ฌ์ฉํ๋ ค๊ณ ๊ฐ๋จํ๊ฒ ๋ง๋ค์๋ ์ฑ์ธ๋ฐ ๋ฐฉ์นํด๋๋ค๊ฐ ๋์ค์ ๋ณด๋๊น ๊ณ์ ์ฐ๊ณ ์๋ ์ฌ๋์ด ์๋๋ผ๊ตฌ์?์ต๊ทผ์ ์ด๊ฒ์ ๊ฒ ์กฐ๊ธ์ฉ ์ ๋ฐ์ดํธ ์ค์ ๋๋ค ! Stor..
๐ Error : Invalid frame dimension SwiftUI๋ก ๊ฐ๋ฐํ๋๋ฐ ํ๋ ์์ ๊ฐ๋ก๋ก ๊ฐ๋ ์ฑ์ฐ๋ ค๊ณ width์ .infinity๋ฅผ ์ ์ฉํ์๋๋ ๋ณด๋ผ์ ๊ฒฝ๊ณ ๊ฐ ๋ํ๋ฌ์๋ค. ์ด๊ฒ ๋ญ๋๋ฉด .. ํ๋ ์์ ์น์๊ฐ ์๋ชป๋์๋ค๋ ๊ฒ์ด๋ค ! โ Solve1. width๊ฐ ์๋ maxWidth๋ฅผ ์ฌ์ฉํ๋ค. ( ๋ด๊ฐ ์ฌ์ฉํ ๋ฐฉ๋ฒ ) Text("Hi") .frame(maxWidth: .infinity) .frame(height: 100, alighment: .center) 2. UIScreen ์ฌ์ด์ฆ๋ฅผ ์ฌ์ฉํ๋ค.Text("Hi") .frame(width: UIScreen.main.bounds.width, height: 100, alighment: .center)
๐ Onboarding ์ด๋ฒ MC3 ํ๋ก์ ํธ์์ ์จ๋ณด๋ฉํ๋ฉด ๊ตฌํ์ ๋งก์์ด์,์๋ ์ ์จ๋ณด๋ฉ์ ๊ตฌํํ ๋๋ ๊ทธ๋ฅ ๋๋๋๋ก ๋ง ๊ตฌํ์ ํด์ ์ ๋ฆฌ๊ฐ ์๋์์ง๋ง์ด๋ฒ์ ๋ค์ํ๋ ๊น์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค ํฉ๋๋ค. 1. ์ฌ์์ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ก์ปฌ ๋ฐ์ดํฐ ๋ณ์ + ์ต์ด ์คํ์ ์จ๋ณด๋ฉ ํ๋ฉด ๋์ฐ๊ฒ ํ๋ ์์ ์ฑ์ด ์ฌ์์ ์ฌ๋ถ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด์ , ๊ธฐ๊ธฐ์ ๋ก์ปฌ ๋ฐ์ดํฐ๋ก ์ ์ฅํฉ๋๋ค.@AppStorage๋ฅผ ์ด์ฉํฉ๋๋ค.์ต์ด ๊ตฌ๋์์๋ง ํด๋น ๋ฐ์ดํฐ ๊ฐ์ด true์ด๋ฏ๋ก ์จ๋ณด๋ฉํ๋ฉด์ด .fullScreen์ผ๋ก ๋์์ง๊ณ , ์ดํ์ false๋ก ๋ฐ๊ฟ์ฃผ๋ฉด์์ฌ์คํ์์๋ ๋จ์ง ์๊ฒ ํฉ๋๋ค.import SwiftUIstruct ContentView: View { // ์จ๋ณด๋ฉ ํ๋ฉด์ ์ฑ ์ต์ด ์คํ๋ ํ๋ฒ๋ง ๋์ฐ๋๋ก ํ๋ ๋ก์ปฌ ๋ณ์ @AppStorage("..
โ Custom Alert ํด์ปคํค์ ํ ๋,์ด๋ฐ ๋ทฐ๋ฅผ ๊ตฌํํด์ผํ์๋ค. ์ด๊ฒ์ ๊ธฐ์กด์ Alert๋ฅผ Customํ๋ฉด ๋์ค๋๊ฒ์ด๋ค. import SwiftUIstruct ContentView: View { @State private var isAlertPresented = false var body: some View { ZStack { VStack { Button("Show Custom Alert") { isAlertPresented.toggle() } .padding() ..
โ ๋ทฐ๋ฅผ ์ ํ์ํค๋ ์ ๋๋ฉ์ด์ ์ธ Flip ๊ธฐ๋ฅ 1. MainViewimport SwiftUIstruct ContentView: View { @State var isFlipped = false var body: some View { VStack(spacing: 0) { ZStack { if isFlipped { FrontView() } else { BackView() } } .scaleEffect(x: isFlipped ? -1 : 1) .f..
โ SwiftData Why is SwiftData ? - SwiftData๋ ์ ๋ง๋ค์ด์ก์๊น์ ? CoreData์ Realm์ ์ฅ์ ์ ํฉ์น๋ฏํ ๋๋ What is SwiftData ? ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ทธ ์์ฒด๋ ์๋๋ผ๋ ๊ฒ. ์ธ๋ถ ํ์ผ ํ์ ์์ด ์ ์ ์ผ๋ก ์ฝ๋์ ์ง์คํ๊ณ Swift์ ์๋ก์ด ๋งคํฌ๋ก ์์คํ ์ ์ฌ์ฉํ์ฌ ์ํ ํ API ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ตฌ์ฑ์์ @ . โ @Model ํด๋์ค๋ฅผ persistent ๋ชจ๋ธ์ด๋ผ๋ ํ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ . ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฐํฐ๊ฐ์ ์ญํ ์ ํ๊ฒ๋๊ณ , ๋ persistent ๋ชจ๋ธ์ด๋ผ๋ ํ์ ์ผ๋ก ์ฑํํ ์ด์ ์ด๊ฑด ์คํค๋ง์ผ ๋ผ๊ณ ์๋ ค์ฃผ๊ฒ ๋๋ค. PersistentModel : AnyObject, Obersvable,..
TextEditor์ Background Color๋ฅผ ์ ์ฉํ๋ ค๋ฉด .scrollContentBackground(.hidden)์ผ๋ก ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์ ์จ๊ธฐ๊ณ .background(.clear)๋ฅผ ์ ์ฉํ๋ฉด ๋๋ค. ์ด ์ํ์์, TextEditor(text: $memoContent) //.scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .cornerRadius(10) .lineSpacing(10) ์ฃผ์์ ์ง์์ฃผ๋ฉด, TextEditor(text: $memoContent) .scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .corne..
โ ๊ธฐ์กด์ ๋ฐฉ์ : NavigationView ๊ธฐ์กด์๋ NaivgationView์ NavigationLink๋ฅผ ํตํด ํ์ดํ๊ณผ ๋ทฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ์์ผ๋ก ์ฌ์ฉ์ด ๋๋ค. var body: some View{ NavigationView { NavigationLink { ๋ทฐ(color: .red, order: 1) } label: { Text("ํ์ดํ") } } } ๐ก Stack์ผ๋ก ๋ฐ๋๋ฉด์ NavigationView์ ์ด๋ค ๋จ์ ์ ๊ทน๋ณตํ๋์ง ? NavigationView์ ์ฃผ์ ๋จ์ ์ค ํ๋๋ SwiftUI์์ ๋งค์ฐ ๊ฐ๋จํ ์ฑ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ทฐ๊ฐ ๋ด๋น๊ฒ์ด์ ์คํ์ ์๋์ผ๋ก ํธ์๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ํ, NavigationView๋ฅผ ์ฌ์ฉํ ๋ ๋ด๋น๊ฒ์ด์ ๋ง๋์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ์..