티스토리 뷰
반응형
추후 보기 좋게 글을 다듬어 갈 예정
inputTextField.delegate = self
NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
로 text field delegate 등록 및 옵저버 등록
@objc private func keyboardWillShow(_ notification: Notification) {
// 키보드가 생성될 때
}
@objc private func keyboardWillHide(_ notification: Notification) {
// 키보드가 사라질 때
}
위의 주석 처리 된 부분에 키보드로 인해 변경되는 부분들을 작성해주면 되는데
두 가지 방법이 있다.
- 영향 받는 아이들의 위치를 옮기는 방법
- view의 하단 constraint를 수정하는 방법
나는 화면의 맨 하단에 inputTextField로 등록한 UITextField와 inputButton으로 등록한 UIButton을 가지고 있다.
따라서 1. 영향 받는 아이들(텍스트 필드와 버튼)의 위치를 옮기기 위해서는
// keyboardWillShow
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
inputTextField.frame.origin.y -= keyboardHeight
inputButton.frame.origin.y -= keyboardHeight
}
// keyboardWillHide
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
inputTextField.frame.origin.y += keyboardHeight
inputButton.frame.origin.y += keyboardHeight
}
로 수정할 수 있다.
또한, 2. view의 하단 constraint를 수정하는 방법을 이용하고 싶다면
bottomConstraint로 등록한 NSLayoutConstraint를 outlet으로 설정하고
// keyboardWillShow
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
bottomConstraint.constant = keyboardHeight
self.view.layoutIfNeeded()
}
// keyboardWillHide
bottomConstraint.constant = 0
self.view.layoutIfNeeded()
로 수정하면 된다.
애초에 view의 맨 하단의 constraint가 0이었기 때문에 다시 계산할 필요가 없어서 키보드가 사라질 때는 키보드 높이를 구하지 않아도 된다.
혹시나 최초에 위 내용대로 설정을 했는데도 시뮬레이터에서 키보드가 움직이지 않는 경우,
I/O > Keyboard > Toggle Software Keyboard (단축키 Command + K)로 한 번 키보드를 띄우고 나면 그 뒤로는 이상 없이 키보드가 나타나고 사라진다.
반응형
'Swift' 카테고리의 다른 글
[Swift5] 특수문자 ("/\ 등) String으로 입력하기 (3) | 2020.05.07 |
---|---|
[Swift] this class is not key value coding-compliant for the key heightConstraint. (0) | 2020.04.29 |
[Swift] 원하는 곳에만 Border 설정하기 (0) | 2020.04.16 |
[Swift] Table View 구분선 없애기 (0) | 2020.04.16 |
[Swift] UITextField Set Padding (0) | 2020.04.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- codable
- urlrequest 모듈화
- ios universal framework
- swift json 파싱
- xcode 16
- iOS Dark Mode
- ios framework device simulator
- 코르도바 Swift
- passing data between ViewControllers
- UITextField 글자수 제한하기
- 코르도바 플러그인
- 코르도바 iOS Framework
- Swift 프로젝트에서 Objective-C
- linux java 설치
- RxSwift UITetxtField
- 코르도바 iOS
- Viewcontroller data
- codable date
- swift generic
- User Interface Style
- urlsession 공통화
- xcode group folder
- UIUserInterfaceStyle
- swift delegate
- passing data between ViewController and View
- loadView viewDidLoad
- loadView
- urlsession 모듈화
- urlrequest 공통화
- Objective-C 프로젝트에서 Swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함