Q&A
前提・実現したいこと
xibでUITextViewを配置したセルを作りました。
セル内のUITextViewをフォーカスした時に、UITextView部分がキーボードで隠れてしまわないように
こちらを参考に画面をずらすこと自体は出来ているのですが、スクロール量についてお伺いしたいです。
以下に画面の写真を添付させて頂いております。
前提として、レイアウトはこの画面に遷移してきた時に決まるので
写真の画面から動的にセルの数が増えたり減ったりすることはありません。
前の画面からのデータを元に、ゴミの日のセクションのセルの数が1~4の数になります。
この画面での、メモを入力の部分がUITextViewになっているのですが
この部分にフォーカスしたときの、画面のスクロール量の決め方をご教示頂きたいです。
現在は取り敢えず決め打ちで、画面全体の高さに対して半分の高さを
上にずらしているので、ゴミの日のセクションのセルの数が1つのときは
なんとなく良さそうな位置までスクロールしているのですが、2つのときは
不燃のセルが見えてしまっています。
望む状態としては、ゴミの日のセクションのセルの数に関係なく
UITextViewにフォーカスした時には、メモのセクションが一番上に来る状態(写真3枚目)に
スクロールするようにしたいです。
伝わりにくい部分があるかもしれませんが、ご教示頂ければ幸いです。
宜しくお願い致します。
アプリの画面
該当のソースコード
Swift
1// Notificationを設定 2 func configureObserver() { 3 let notification = NotificationCenter.default 4 notification.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil) 5 notification.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil) 6 } 7 8 // Notificationを削除 9 func removeObserver() { 10 let notification = NotificationCenter.default 11 notification.removeObserver(self) 12 } 13 14 // キーボードが現れた時に、画面全体をずらす。 15 @objc func keyboardWillShow(notification: Notification?) { 16 let rect = (notification?.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 17 let duration: TimeInterval? = notification?.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double 18 //画面に対して画面の半分の高さを決め打ちしてしまっている 19 let height = -(rect?.size.height)! / 2.0 20 UIView.animate(withDuration: duration!, animations: { () in 21 let transform = CGAffineTransform(translationX: 0, y: height) 22 self.view.transform = transform 23 }) 24 } 25 26 // キーボードが消えたときに、画面を戻す 27 @objc func keyboardWillHide(notification: Notification?) { 28 let duration: TimeInterval? = notification?.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? Double 29 UIView.animate(withDuration: duration!, animations: { () in 30 31 self.view.transform = CGAffineTransform.identity 32 }) 33 }
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2019/02/04 03:49
2019/02/04 04:04 編集
2019/02/04 04:09
2019/02/04 12:43
2019/02/04 15:31
2019/02/05 12:59