いつもお世話になっております。
UITextViewをテキスト内容に応じて高さが可変になるように実装しています。
入力終了後、キーボードを閉じると、テキスト内容が入っていても、入っていなくても、
UITexiViewの高さを元の高さに戻すようにしています。
テキスト内容が入ったままで元の高さに戻すと表示されるテキスト内容が一番最初の行になります。
元の高さに戻した時にテキスト内容の一番最後の行が表示されるようにしたいのですが、方法がわかりません。
また、テキスト内容が入ったまま、キーボードを閉じて、もう一度、UITextViewを選択した際に、入力開始位置(カーソルの位置)を一番最後の文字に合わせたいです。
以下に関連するソースコードを記載いたします。
ご教示頂けますと幸いです。
//messageTextViewのテキスト内容に変化がある度に呼ばれる func textViewDidChange(_ textView: UITextView) { // 入力フィールドの最大サイズ let maxHeight: CGFloat = 100.0 //テキスト内容に応じたぴったしサイズを計算 let size:CGSize = messageTextView.sizeThatFits(messageTextView.frame.size) //最大サイズ以下なら if(size.height <= maxHeight) { //ぴったしサイズをAutoLayoutに代入 _constraintTextViewHeight.constant = size.height } }
// キーボードが現れた時に、画面全体をずらす。 @objc func keyboardWillShow(notification: Notification?) { /* 省略 */ // 入力フィールドの最大サイズ let maxHeight: CGFloat = 100.0 //テキスト内容に応じたぴったしサイズを計算 let size:CGSize = messageTextView.sizeThatFits(messageTextView.frame.size) if(size.height <= maxHeight) { //ぴったしサイズをAutoLayoutに代入 _constraintTextViewHeight.constant = size.height } else { //最大サイズを超えていれば、100.0を代入 _constraintTextViewHeight.constant = 100.0 } } }
// キーボードが消えたときに、画面を戻す @objc func keyboardWillHide(notification: Notification?) { /* 省略 */ //AutoLayoutを元の高さに戻す self._constraintTextViewHeight.constant = 33 } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/12 06:11
2017/12/12 10:29