#17–6-客製化『來吃波奇』專用記帳APP,keyboardNotification知道鍵盤高度,調整view的y軸讓整個畫面往上移動

這篇主要在補充再畫面textView輸入文字時候,keyboard會擋住畫面,這樣根本不知道自己到底有沒有打錯字,那真的是非常的麻煩🙁,所以這個問題是一定要解決的囉!

功能介紹:

  1. 利用UIResponder.keyboardWillShowNotification鍵盤將出現時接收通知
  2. 利用UIResponder.keyboardWillHideNotification鍵盤將消失時時接收通知
  3. 利用UIResponder.keyboardFrameEndUserInfoKey找到鍵盤size.heigh高度
  4. 利用UIViewPropertyAnimator.runningPropertyAnimator動畫效果,讓畫面更順暢

上一篇:

一、UIResponder.keyboardWillShowNotification鍵盤將出現時執行keyboardWasShown讓view往上移動

如果沒有讓畫面整個上移的話就會整個卡住textView,真的就不知道自己在打什麼內容🙁會像下面這樣

這時候就要使用到UIResponder.keyboardWillShowNotification來接收通知,這樣就可以知道keyboayd的高度如何

guard let info = notification.userInfo,let keyboardFrameValue = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return } // 抓取keyboardFrameEndUserInfoKey並轉型NSValuelet keyboardFrame = keyboardFrameValue.cgRectValue // 生成keyboard的framelet keyboardSize = keyboardFrame.size // 生成keyboard的size

這時就可以呼叫keyboardSize.heigh知道keyboard的高度是多少了,但是知道高度後要怎麼移動View讓textView的底部剛好切平keyboard呢?這邊我的解法是,整個view的高度(−減掉)view的最上部~textView最底部,keyboard的高度再去扣掉兩個相減的數值,就是view要上移的數值,用以下圖片來解說可能比較好理解。

從圖片可以清楚知道鍵盤的高度(−減掉)相減後剩下的數值,就是我們view要往上移動的數值,寫法如下

裡面要再多判斷noteTextView.isFirstResponder(true)時view.bounds.origin.y = contentInsets才往上移動,(false)時view.bounds.origin.y = 0(回復原本位子),這邊我有在多加UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 0.3, delay: 0),時間0.3秒、重複0次,這樣看起來會比較順暢。

Ya~看起來還不錯👍!

二、UIResponder.keyboardWillShowNotification鍵盤將消失時執行keyboardWillBeHidden讓view回復原來的位子

這邊就是簡單的keyboard在收回Done的時候,讓view.bounds.origin.y = 0即可

--

--