私は数日前からかなり愚かな問題に苦労していましたが、解決策を見つけることができませんでした。Swift 3:ユーザーがタッチしたときにtextViewのカーソルが表示される
私は、次のような階層を持つビューコントローラを持っている:xcode screenshot
ユーザーがTextViewの下の写真を追加する可能性があります(私はまだこの機能を実装していません)。 私のtextViewの "スクロール可能"プロパティをfalseに設定して、ユーザーが入力した内容に応じて高さが自動的に増減するようにしました。 viewDidLoadで、次のオブザーバーと
func keyboardWillShow(notification: NSNotification) {
var userInfo = notification.userInfo!
var keyboardFrame: CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
keyboardFrame = self.view.convert(keyboardFrame, from: nil)
var contentInsets: UIEdgeInsets = self.scrollView.contentInset
contentInsets.bottom = keyboardFrame.size.height + 3*self.postContentTextView.font!.lineHeight
self.scrollView.contentInset = contentInsets
}
func keyboardWillHide(notification: NSNotification) {
let contentInsets = UIEdgeInsets.zero
self.scrollView.contentInset = contentInsets
}
:キーボードはそうのように表示されたときに 私はscrollViewのcontentInsetsを変更するために、通知センターを使用し、私はまた、スクロールビューのコンテンツサイズを設定
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
viewDidLayoutSubviews機能に:
override func viewDidLayoutSubviews() {
self.scrollView.contentSize = self.postContentTextView.frame.size
}
すべてが、私はテキストが「長すぎる」のときと認識するまで、正常に動作するように見えた(またはおそらくそれは他のものです)、私はそれらをタッチするとtextViewの最後の行を選択することができません。実際には、私が画面に触れると、カーソルは私がちょうど触れた行に表示されるはずです。これは通常textViewの4分の3で動作しますが、textViewが最後の行について指を検出しないように見えます(高さが大きいほど、この問題は悪化します)。 最初は画面に問題があると思っていましたが、iOSシミュレータでテストしたところ、同じ問題が発生しました。 私はそれについて完全に無知だと認めなければならない。問題の原因を知っている人はいますか?
誤って透明なビューを追加した可能性があります。その可能性はありますか? – jegadeesh
制約を確認しましたか? textViewはスーパービューの範囲外にある可能性があります。それをスーパービューしてテストするには 'clipsToBounds'を設定してください。スーパービューの範囲外の場合は、タッチを検出しません – Bali
それはバリです!テキストが長すぎると、textViewがコンテンツビューよりも大きくなります。どのように私はそれを考えなかったのですか?どうもありがとうございました!問題が解決しました。 – Lantian