
iOS 앱 개발 중에 다국어를 지원하는 방법을 알아보자. # 앱 설정 1. 문자열 파일 만들기 New File로 String File을 생성한다. 파일명은 Localizable으로 하자. 그래야 나중에 NSLocalizedString() 함수를 디폴트로 테이블 이름을 사용할 수 있어서 편하다. 다름 이름을 하게 되면 매번 테이블 이름을 전달해야 한다. 2. 생성한 문자열 파일을 인스펙터에서 Localize...로 선택한다. 3. Project > Info > Localization 에서 언어를 추가한다. # 다국어 추가하기 언어별로 문자열 파일이 생성되어 있을 것이다. 각 문자열 파일에 키-값 쌍으로 다국어를 추가한다. 꼭 끝에 콜롬을 추가해야 한다. (안하면 에러 발생) // en "groups" = ..

참고사이트: https://developers.google.com/admob/ios/test-ads?hl=ko 공식문서와 구글링한 정보에서 Info.plist에 정보를 업데이트해라고 하는데... 도저히 Info.plist를 찾을 수가 없었다. 다음과 같이 진행해보자. info.plist의 기본 소스 코드에서 사이에 여기에!!!! CFBundleURLTypes 다음 스피넷 코드를 추가한다. GADApplicationIdentifier 여기에! 본인 앱id 입력하기 SKAdNetworkItems SKAdNetworkIdentifier cstr6suwn9.skadnetwork SKAdNetworkIdentifier 4fzdc2evr5.skadnetwork SKAdNetworkIdentifier 4pfyvq9l..

SwiftUI의 TabView는 PageTabViewStyle을 제공한다. 다음 코드는 CoreData의 모델을 PageTabViewStyle로 만든 코드가 된다. indexViewStyle도 추가해서 하단에 인덱스뷰도 보이게 했다. struct ContentView: View { @Environment(\.managedObjectContext) private var viewContext @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)], animation: .default) private var items: FetchedResults var body: some View { TabView { Fo..
Form에서 TextField가 있을 때, 스크롤 시 키보드는 감추는 예제이다. 먼저 키보드를 감추는 메서드를 View에 확장해서 쉽게 키보드를 감출 수 있게 한다. import Foundation import SwiftUI extension View { func hideKeyboard() { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) } } 그리고 Form에 simultaneousGesture 수정자를 추가하고, 드래그 제스처가 발생 시 키보드를 감추는 메서드를 호출한다. var body: some View { Form { ... } .simultaneou..

현재 스크롤 뷰에 포함된 TextEditor에서 줄바꿈이 발생하면 뷰는 커지지만 스크롤이 되지 않아서 자동 스크롤이 되도록 만들어야 한다. # TextEditor의 최소 높이 설정하기 먼저 알아야 할 것은 List 또는 ScrollView 안에 TextEditor를 넣으면 TextEditor의 높이는 최소가 된다. 그래서 frame으로 minHeight를 설정해야 한다. # TextEditor 크기를 구하는 방법 아직은 TextEditor의 크기를 얻는 메서드가 제공되지 않는다. 그래서 bacoground에 HStack같이 확장되는 뷰를 넣고 GeometryReader로 HStack의 사이즈를 측정하면 TextEditor의 크기를 얻을 수 있다. 다음은 TextEditor의 크기를 구하는 간단한 Swif..
TextEditor에는 PlaceHolder를 설정할 수 없다. 그래서 ZStack을 이용해서 TextEditor의 텍스트가 빈문자열인 경우, PlaceHolder로 사용할 Text를 보이게 하면 된다. ZStack(alignment: .topLeading) { if content.isEmpty { Text("content") .padding(7) .foregroundColor(Color(uiColor: .placeholderText)) } else { EmptyView() } TextEditor(text: $content) }

Form에서 이름과 콘텐츠를 가지는 경우가 너무 많아서 뷰로 만들어 보았다. 이때 @ViewBuilder를 사용해야 하는데, 구글링을 통해서 얻은 코드로 작동만 되도록 만들어서, 정확한 작동법은 알지 못한다. 나중에 시간내서 @ViewBuilder에 대해서 정리해야 겠다. import SwiftUI struct NamedContent: View { var name: String @ViewBuilder var content: () -> Content var body: some View { HStack { Text(name) .bold() Spacer() content() } } } struct NamedContent_Previews: PreviewProvider { static var previews: s..
iOS 16 이상 TextEditor(text: $text) .scrollContentBackground(.hidden) .background(.red) iOS 15 이하 struct ContentView: View { @State private var text = "" init() { UITextView.appearance().backgroundColor = .clear } var body: some View { List { TextEditor(text: $text) .background(.red) } } }