質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

690閲覧

UITextFieldにKeyboardが重なるときだけ全体を上にスライドさせたい

sakku727

総合スコア25

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/10/29 08:12

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
UITextFieldにKeyboardが重なるときだけ全体を上にスライドさせたいのですが、キーボードと重なる部分のTextFieldを開いてもスライドしません。エラーなどは出ていません。
どうすればいいでしょうか。

該当のソースコード

swift

1 2 32 43 54 65 76 87 98 109 1110 1211 1312 1413 15override func viewDidLoad() { 16 super.viewDidLoad() 17 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) 18 self.view.addGestureRecognizer(tapGesture) 19 } 20 21 override func viewWillAppear(_ animated: Bool) { 22 super.viewWillAppear(animated) 23 // Notificationを設定する 24 let nc = NotificationCenter.default 25 nc.addObserver(self, selector: #selector(self.keyboardWillShowNotification(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) 26 nc.addObserver(self, selector: #selector(self.keyboardWillHideNotification(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) 27 28 29 } 30 31 32 // NotificationCenterからのキーボード表示通知に伴う処理 33 @objc func keyboardWillShowNotification(_ notification: Notification) { 34 guard let textField = _activeTextField else { 35 return 36 } 37 let rect = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 38 guard let keyboardHeight = rect?.size.height else { 39 return 40 } 41 let mainBoundsSize = UIScreen.main.bounds.size 42 let textFieldLimit = textField.frame.origin.y + textField.frame.height + 8.0 43 let keyboardLimit = mainBoundsSize.height - keyboardHeight 44 if keyboardLimit <= textFieldLimit { 45 let duration: TimeInterval? = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double 46 UIView.animate(withDuration: duration!, animations: { () in 47 self.view.transform = CGAffineTransform(translationX: 0, y: -keyboardHeight) 48 }) 49 } 50 } 51 // NotificationCenterからのキーボード非表示通知に伴う処理 52 @objc func keyboardWillHideNotification(_ notification: Notification) { 53 let duration: TimeInterval? = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? Double 54 UIView.animate(withDuration: duration!, animations: { () in 55 self.view.transform = CGAffineTransform.identity 56 }) 57 } 58 59 // 編集中のTextFieldを保持する変数 60 private var _activeTextField: UITextField? = nil 61 // TextFieldの編集直後に呼ばれる 62 func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 63 // 編集対象のTextFieldを保存する 64 _activeTextField = textField 65 return true; 66 } 67 //他の場所タップでキーボードを閉じる 68 @objc func dismissKeyboard() { 69 self.view.endEditing(true) 70 } 71

補足情報(FW/ツールのバージョンなど)

Swift5
Xcode12.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問