2017-06-14 25 views
1

私は数日前からかなり愚かな問題に苦労していましたが、解決策を見つけることができませんでした。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シミュレータでテストしたところ、同じ問題が発生しました。 私はそれについて完全に無知だと認めなければならない。問題の原因を知っている人はいますか?

+0

誤って透明なビューを追加した可能性があります。その可能性はありますか? – jegadeesh

+0

制約を確認しましたか? textViewはスーパービューの範囲外にある可能性があります。それをスーパービューしてテストするには 'clipsToBounds'を設定してください。スーパービューの範囲外の場合は、タッチを検出しません – Bali

+0

それはバリです!テキストが長すぎると、textViewがコンテンツビューよりも大きくなります。どのように私はそれを考えなかったのですか?どうもありがとうございました!問題が解決しました。 – Lantian

答えて

2

あなたは制約を確認しましたか? UITextViewは、スーパービューのboundsの外にある可能性があります。スーパービュー&をテストするようにclipsToBoundsを設定します。それがスーパービューboundsの外にある場合は、タッチを検出しません。

関連する問題