前提・実現したいこと
Xcode-Swiftでのスマホアプリ開発です。
UIScrollView 上に配置した UITextField や UITextView にカーソルをあてた際、キーボードで入力欄が隠れてしまわないようにScrollViewを競り上がるようにする処理を入れています。
発生している問題・エラーメッセージ
UITextField では画面がせり上がるのですが、UITextView については動作しません。
該当のソースコード
ソースコード
// キーボードが出たらスクロールビューがせり上がる
var offset: CGPoint?
@objc
func keyboardWillShow(_ notification: NSNotification) {
offset = scrollView.contentOffset
if let keyboardHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height {
print("offset=(String(describing: offset))")
print("keyboardHeight=(keyboardHeight)")
scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardHeight, right: 0)
print("contentInset=(scrollView.contentInset)")
}
}
// キーボードが隠れるとスクロールビューが戻る @objc func keyboardWillHide(_ notification: NSNotification) { UIView.animate(withDuration: 0.2, animations: { if let unwrappedOffset = self.offset { self.scrollView.contentOffset = unwrappedOffset } self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) }) }
試したこと
上記、print 文は UITextView でも出ています。また、同列に配置したUITextFieldで出るprint結果と何ら変わる部分がありません。ただ、動作としては UITextField だとせりあがり、UITextView では無反応です。
補足情報(FW/ツールのバージョンなど)
シミュレータ(iPhone SE)で動作確認をしています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。