개발자
Texteditor을 사용해서 내용 입력 칸을 만들고 있습니다. 그런데 키보드가 올라오면 키보드가 texteditor을 포함한 view들을 다 위로 올리면서 네비게이션 타이틀이랑 겹치게 됩니다. 이것 저것 만져보니 texteditor에 frame을 설정하게 되면 키보드가 올라올 때 이런 현상이 발생하는 것 같습니다. 이럴 때 어떻게 해결하는지 아시는 분 있을까요?
1import SwiftUI
2
3struct RecordView: View {
4 @StateObject var viewModel = RecordViewViewModel()
5 @Environment(\.dismiss) var dismiss
6
7 var body: some View {
8 NavigationView {
9 ZStack {
10 Color("lightBrown")
11 .ignoresSafeArea()
12
13 VStack {
14 CardView(width: 340, height: 180) {
15 VerseTextView()
16 }
17
18 CardView(width: 340, height: 440) {
19 TextEditor(text: $viewModel.thought.max(200))
20 .padding(20)
21 .lineSpacing(5)
22 .scrollContentBackground(.hidden)
23 .scrollDisabled(true)
24 }
25 }
26 }
27 .navigationTitle("오늘의 말씀")
28 .navigationBarTitleDisplayMode(.inline)
29 .toolbar {
30 ToolbarItemGroup(placement: .navigationBarLeading) {
31 Button {
32 dismiss()
33 } label: {
34 Text("취소")
35 }
36
37 }
38
39 ToolbarItemGroup(placement: .navigationBarTrailing) {
40 Button {
41
42 } label: {
43 Text("저장")
44 }
45
46 }
47 }
48 }
49 }
50}
51
52struct RecordView_Previews: PreviewProvider {
53 static var previews: some View {
54 RecordView()
55 }
56}
답변 2
이 코드를 추가해보시죠. 좀 구글링 해보니 이건 iOS 16 부터 적용 가능한 modifier 로 나옵니다. 그 iOS 13, 14 에서는 UIKit 을 이용하는 방법이 대세인가보네요. https://velog.io/@whale/SwiftUI-NavigationBar-Background-%EC%A1%B0%EC%A0%88%ED%95%98%EA%B8%B0
1.toolbarBackground(Color.pink, for: .navigationBar)
2.toolbarBackground(.visible, for: .navigationBar)
SwiftUI에서 키보드와 상호작용하는 것은 몇 가지 도전적인 문제를 제시할 수 있습니다. 키보드가 나타날 때 View를 조정해야 하는 경우가 그 중 하나입니다. 이 문제를 해결하기 위해 ScrollView를 사용하거나, 또는 키보드 높이에 따라 padding을 조절하는 방법을 사용할 수 있습니다. 1. 예를 들어, 아래와 같이 키보드 높이에 따라 padding을 조절하는 방법이 있습니다. 이 코드는 키보드가 나타날 때와 사라질 때의 높이를 감지하여 keyboardHeight를 업데이트합니다. 이를 사용하면 키보드가 나타날 때 화면이 키보드 위로 올라가는 것을 막을 수 있습니다. 2. 또는, 해당 View를 ScrollView 내에 배치하여 자동으로 스크롤되도록 하는 방법도 있습니다: 위의 두 가지 방법 중 하나를 사용하여 키보드가 View를 가리는 문제를 해결할 수 있습니다. 어떤 방법을 사용할지는 사용자의 앱의 디자인과 요구사항에 따라 달라집니다.
1#1
2@State private var keyboardHeight: CGFloat = 0
3
4var body: some View {
5 // Your view
6 .padding(.bottom, keyboardHeight)
7 .onReceive(
8 NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)
9 .map { $0.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect }
10 .map { $0.height }
11 ) { height in
12 keyboardHeight = height
13 }
14 .onReceive(
15 NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)
16 ) { _ in
17 keyboardHeight = 0
18 }
19}
20
21#2
22ScrollView {
23 // Your view
24}
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!