画面下にtextFieldやtextViewを配置すると、キーボード出現時に隠れてしまうことがある。
キーボード出現と一緒に、textFieldの位置を上げることで解決。
キーボード出現時にtextFieldを上げる方法
UIResponderのkeyboardWillShowとkeyboardWillHideを使い、キーボード出現時とキーボードが隠れた時にviewの高さを変える。
NotificationCenterで検知する。
import UIKit class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() //デリゲート textField.delegate = self //キーボードが出現を検知して、行う処理を指定 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillChangeFrameNotification, object: nil) //キーボードが閉じたのを検知して、行う処理を指定 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) } //キーボードのframeに変化がある時に呼ばれるメソッド @objc func keyboardWillShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { //キーボドが初めて出てきた時(viewが初期位置) if self.view.frame.origin.y == 0 { //キーボードの高さ分viewを上に移動する self.view.frame.origin.y -= keyboardSize.height } else {//キーボードはすでに出ている時(viewがキーボード分上がっている) //予測変換部分の高さ分viewを上に移動する let suggestionHeight = self.view.frame.origin.y + keyboardSize.height self.view.frame.origin.y -= suggestionHeight } } } //キーボードが隠れた時に呼ばれるメソッド @objc func keyboardWillHide() { //viewが初期位置でない場合、0に戻す if self.view.frame.origin.y != 0 { self.view.frame.origin.y = 0 } } //return押下でキーボードを閉じる func textFieldShouldReturn(_ textField: UITextField) -> Bool { self.view.endEditing(true) return false } }