2017-03-16 4 views
2

を発生したとき、私は次のコードを使用します。Swift3 iOSが設定UITextView高さを改行が私のTextViewがコンテンツとその高さのサイズを変更するようにするに

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let contentSize = textView.sizeThatFits(textView.bounds.size) 
    self.textViewHeight.constant = contentSize.height 

    //textViewHeight is the height constraint of the textView defined in the storyboard. 

    return true 
} 

問題は、それがときに、ラインサイズの変化を認識しないということです休憩が起こる。 returnキーを押すと、別の文字を追加するまでリサイズされません。改行するのに十分なテキストを書くと同じことが起こります。あなたが別のキャラクターを置いた後にのみサイズが変更されます。行を削除するために文字を削除するときも同様ですが、高さのサイズを変更するには別の文字を削除する必要があります。あなたがあなたのメッセージを書くとき、iMessageとWhatsappはこの動作を共有していないので、これはうっすらと感じる。

私はここで何が欠けていますか?

func textViewDidChange(_ textView: UITextView) { 
let fixedWidth = textView.frame.size.width 
let newSize = textView.sizeThatFits(CGSize.init(width: fixedWidth, height: CGFloat(MAXFLOAT))) 
var newFrame = textView.frame 
newFrame.size = CGSize.init(width: CGFloat(fmaxf(Float(newSize.width), Float(fixedWidth))), height: newSize.height) 
self.textViewHeight.constant = newSize.height 
} 

ハッピーコーディング:

答えて

1

は、次のコードを使用します。

+0

ありがとうございましたが、まだ説明したように動作します:/ –

+0

更新された回答を確認してくださいこれは私のプロジェクトで使用しているコードです。関数全体をコピーします。それは間違いなく希望通りに動作します。行を壊すときにnewFrame値を出力してみてください。 –

+0

ありがとうございます!私はスクロールを無効にしなければならなかった。スクロールを有効にしてこれを達成する方法を知っていますか? –

関連する問題