2018. 4. 3. 17:30ㆍProgramming/Swift
키보드가 활성화 될 때 하단 부분은 가려지게 될 것이다.
반드시 보여져야 하는 레이어들이라면 키보드 위로 올려서 보여질 수 있게 해보자.
let inputTyping = UITextView() let buttonExecution = UIButton() override func viewDidLoad() { super.viewDidLoad() let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard)) self.view.addGestureRecognizer(tap) NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) } @objc func dismissKeyboard() { self.view.endEditing(true) } @objc func keyboardShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { if self.view.frame.origin.y == 0 { self.view.frame.origin.y -= keyboardSize.height self. inputTyping.frame.origin.y -= keyboardSize.height self. buttonExecution.frame.origin.y -= keyboardSize.height } } } @objc func keyboardHide(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { if self.view.frame.origin.y != 0 { self.view.frame.origin.y += keyboardSize.height self. inputTyping.frame.origin.y += keyboardSize.height self. buttonExecution.frame.origin.y += keyboardSize.height } } } |
나의 삽질은 어디까지 인 것인가?
화면의 반을 차지하는 imageView, 그 아래 textView, 그 아래 button 이 위치하도록 구현을 하였다.
여기서 내가 원하던 것은 키보드가 활성화 될 때 일부로 버튼이 보여지지 않게 하고 imageView 와 textView 창만 올라가게 끔 하려고 했다.
물론 위 소스와 동일하게 했을 시 잘 올라간다.
여기서 더 욕심을 내서 textView를 키보드 바로 위로 맞춰서 하는게 나의 목표였다.
이해가 되질 않는다면 아래 그림을 보면 될 것이다.
그런데....
키보드 바로 위로 textView를 맞춰지지 않는 것이다.
키보드에 가려져 보이지 않거나, 반만 보이거나, 너무 위로 올라가서 키보드와의 간격이 넓어지거나
온갖(?) 방법을 다 해보았다.
온갖 방법이란 내 머리속의 수학 아닌 산수를 동원하여, 위치값까지 하나하나 찾아가고,
"일단 키보드가 바라보는 디바이스의 위치값과 뷰안에 존재하는 위치값은 다를 수 있지!!" 라며
말이 되는 가설과 말도 안되는 가정들을 노트에 수십번을 적어가며
계산하고 계산하였다.
이렇게 구구절절 얘기하는 것은 그만큼 삽질을 많이 했다는 얘기이다.
결국에는 내가 세운 계산법으로는 해내지 못하였다.
포기하고 버튼도 위로 올려버렸다.
위 소스에서 한줄만 더 추가하면 된다.
소스의 파란색 글씨가 그것이다.
1. keyboardShow => self. buttonExecution.frame.origin.y -= keyboardSize.height 2. keyboardHide => self. buttonExecution.frame.origin.y += keyboardSize.height |
허무하게 이 한줄을 넣고 시뮬레이션을 돌리는 순간.
유레카!!!!
이 한줄 추가하면서 모든게 제대로 잘 보여지는데,
아래 버튼 사이즈만 내려볼까?
라는 생각이 들어버렸다.
되면 당연히 좋지만, 한편으로는 엄청 허무할 것 같다는 생각이 들었다.
성공
@objc func keyboardShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
let keyboardResize = keyboardSize.height - createButton.frame.height if self.view.frame.origin.y == 0 { self.view.frame.origin.y -= keyboardResize self. textView.frame.origin.y -= keyboardResize } } } |
성공은 했지만, 버튼을 위로 올리는 것이 나을 것 같아서 적용은 하지 않았다.
추후에 적용할 일이 생기면 참고하기 위해서 이렇게 글로 남겨 놓는다.
매번 느끼는 것이지만 항상 허무한 결론이다.
참고 URL
https://stackoverflow.com/questions/26070242/move-view-with-keyboard-using-swift
'Programming > Swift' 카테고리의 다른 글
[Swift] navigation bar 구분선 제거 (0) | 2019.02.11 |
---|---|
[Swift] 이미지가 보여지지 않을 경우 - Color Space (0) | 2018.09.12 |
[swift] tabbar 이미지 크기 및 변화 (0) | 2018.04.03 |
[ERROR] libsystem_kernel.dylib`__abort_with_payload: (0) | 2017.09.22 |
랜덤값을 중복되지 않게 추출 (0) | 2017.09.12 |