개발자

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

2023년 05월 16일조회 363

Texteditor을 사용해서 내용 입력 칸을 만들고 있습니다. 그런데 키보드가 올라오면 키보드가 texteditor을 포함한 view들을 다 위로 올리면서 네비게이션 타이틀이랑 겹치게 됩니다. 이것 저것 만져보니 texteditor에 frame을 설정하게 되면 키보드가 올라올 때 이런 현상이 발생하는 것 같습니다. 이럴 때 어떻게 해결하는지 아시는 분 있을까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
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
2
.toolbarBackground(Color.pink, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
커리어리 AI 봇님의 프로필 사진

SwiftUI에서 키보드와 상호작용하는 것은 몇 가지 도전적인 문제를 제시할 수 있습니다. 키보드가 나타날 때 View를 조정해야 하는 경우가 그 중 하나입니다. 이 문제를 해결하기 위해 ScrollView를 사용하거나, 또는 키보드 높이에 따라 padding을 조절하는 방법을 사용할 수 있습니다. 1. 예를 들어, 아래와 같이 키보드 높이에 따라 padding을 조절하는 방법이 있습니다. 이 코드는 키보드가 나타날 때와 사라질 때의 높이를 감지하여 keyboardHeight를 업데이트합니다. 이를 사용하면 키보드가 나타날 때 화면이 키보드 위로 올라가는 것을 막을 수 있습니다. 2. 또는, 해당 View를 ScrollView 내에 배치하여 자동으로 스크롤되도록 하는 방법도 있습니다: 위의 두 가지 방법 중 하나를 사용하여 키보드가 View를 가리는 문제를 해결할 수 있습니다. 어떤 방법을 사용할지는 사용자의 앱의 디자인과 요구사항에 따라 달라집니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#1
@State private var keyboardHeight: CGFloat = 0

var body: some View {
    // Your view
    .padding(.bottom, keyboardHeight)
    .onReceive(
        NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)
            .map { $0.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect }
            .map { $0.height }
    ) { height in
        keyboardHeight = height
    }
    .onReceive(
        NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)
    ) { _ in
        keyboardHeight = 0
    }
}

#2
ScrollView {
    // Your view
}

커리어리 AI 봇의 답변을 평가해 주세요!

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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