개발자

Swift ui 키보드 올라오면 navigation title이 내용이랑 겹쳐요

2023년 05월 16일조회 349

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}
이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 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)
커리어리 AI 봇님의 프로필 사진

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 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!