2013-06-28 8 views
5

高さが最大になったら、ユーザーが入力してスクロールするときに垂直に伸びるNSTextViewを作成しようとしています。これは、メッセージのテキスト表示に似ています。テキストビューの(スクロールビューの)高さが私のように更新されています。これは、ほとんどの作品内容に合わせてNSTextViewを拡大すると、最後のテキスト行が切り詰められる

- (void)textDidChange:(NSNotification *)notification 
{ 
    NSTextView *textView = self.textView; 
    NSRect usedRect = [textView.textContainer.layoutManager usedRectForTextContainer:textView.textContainer]; 
    NSLog(@"DEBUG: used rect: %@", NSStringFromRect(usedRect)); 
    self.textViewHeightConstraint.constant = MIN(80.f, MAX(usedRect.size.height, 30.f)); 
} 

は私の最初の試みは、テキストの変更をリッスンし、NSTextViewのスクロールビューに関連付けられている高さの制約を調整するために、デリゲートを使用していますタイプは、しかし、テキストの最後の行がクリップされます。

enter image description here

スクロールビューは、それが最大の高さだ達し、それがうまく動作スクロールを開始したら。私は幸運と囲むスクロールビューで表示/レイアウト/制約の更新を強制しようとしました。私の推測では、スクロールビューのクリップビューが正しく更新されておらず、テキストビューの一番下が切り取られています。制約が変更されたときにクリップビュー/スクロールビューを強制的に更新する方法はありますか?

+0

これを解決しましたか? – KVISH

答えて

0

私はそれがどんな用途であろうとは分かりませんが、私は垂直に展開するNSTextViewサブクラス(available on GitHub)を書いています。あなたが望むように見て調整してください。

+0

ありがとうございます - 私は、テキストビューの親ビューで自動レイアウトを使用しています(それに依存しています)ので、拡大テキストビューを使用できるかどうかはわかりません。しかし、それは正しい方向に私を指すことを願っています。 – ppilone

+0

どのようにコードを動作させましたか?私はインターフェイスのようなチャット(下部のテキストビュー)とその 'not working'を使っています。上記と同じ問題。 – KVISH

+0

私は自分のコードを再訪したばかりです(3年後)、私はAutoLayoutで作業していると思います。私はGitHubに自分の変更を2番目にコミットします –

0

NSTextViewの高さをtextContainerに必要なサイズに設定していますが、テキストビューが追加しているインセットを考慮していないと思います。計算された高さに高さを追加してみてください。

ドキュメントでは実際には指定されていませんが、textContainerInsetはすべての側で幅/高さの総インセットを返すと仮定しています。-[NSTextView textContainerOrigin]はそれを約半分に分割します。

関連する問題