高さが最大に達すると、ユーザーが入力してスクロールすると垂直方向に成長する 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));
}
これはほとんど機能します。入力すると、テキスト ビュー (スクロール ビュー) の高さが更新されますが、テキストの最後の行が切り取られます。
スクロール ビューが最大の高さに達してスクロールを開始すると、うまく機能します。囲んでいるスクロールビューで表示/レイアウト/制約の更新を強制しようとしましたが、うまくいきませんでした。私の推測では、スクロール ビューのクリップ ビューが正しく更新されておらず、テキスト ビューの下部が切り取られています。制約が変更されたときに、クリップ ビュー/スクロール ビューを強制的に適切に更新する方法はありますか?