以下のコード スニペットは、Xcode 5 をインストールする前に UITextView フレームのサイズをコンテンツの高さに変更するために機能しましたが、アップグレード以降は機能しません。
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
検索しましたが、修正が見つかりませんでした。何かご意見は?
以下のコード スニペットは、Xcode 5 をインストールする前に UITextView フレームのサイズをコンテンツの高さに変更するために機能しましたが、アップグレード以降は機能しません。
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
検索しましたが、修正が見つかりませんでした。何かご意見は?
iOS 7 には、これに関する新しい機能があります。
テキストが更新された後にテキスト ビューで使用される「フィットした」サイズを取得するには、textView のプロパティを呼び出しusedRectForTextContainer:
て、textView のプロパティを引数としてlayoutManager
渡します。textContainer
スクロールに関する警告: ただし、テキスト ビューでスクロールが無効になっている場合、テキストを更新した後にテキスト ビューのフレーム サイズを変更すると、予期しない視覚的なバグが発生する可能性があることに注意してください。このような場合は、テキスト ビューのテキストを編集する前にスクロールを有効に設定し、更新後に無効にします (スクロールを無効のままにする必要がある場合)。
textView に contentSize を強制的に更新させる正しい方法は、呼び出すことだと思います
[textView layoutIfNeeded]
ただし、iOS 7.0 および 7.1 では、最初に設定しない限り、これはまだ確実に機能しないようです。
textView.layoutManager.allowsNonContiguousLayout = false;
「非連続レイアウト」が何を意味するのかについての適切な説明が実際には見つからないため、これがバグであるかどうかは明確ではありません。
(私の個人的な使用例は、プログラムで更新textView.text = newValue
してから、textView を適切にサイズ変更しようとしています。)
[textView sizeToFit];
あなたが必要とするものです。
あなたがする必要があるのは、次のことを確認することだけです:
[textView setScrollEnabled:YES];
UITextView テキスト コンテンツを設定する前に。
その後、次のことができます。
[textView sizeToFit];
[textView setScrollEnabled:NO];
テキストを設定した後。独自のブリング関数を作成したり、複雑なバウンディング rect メソッドを使用したりするのと同じです。解決策が 3 行ほどの単純なものであるのに、なぜこれほど複雑なものを使用するのでしょうか?
つまり、これらの関数を次のようにラップします。
- (void) setText:(NSString *)theTextToAdd andResizeTheDamnTextView:(UITextView *)textView {
[textView setScrollEnabled:YES];
[textView setText:theTextToAdd];
[textView sizeToFit];
[textView setScrollEnabled:NO];
}
また、ファイルごとまたはグローバルに定義して、4行を手動で作成またはコピー/貼り付けして毎回呼び出す必要がないようにします。次のように呼び出します。
[yourTextViewIvar setText:@"DUMMY STRING" andResizeTheDamnTextView:yourTextViewIvar];
それでもうまくいかない場合:
[yourTextViewIvar setText:[self setText:@"DUMMY STRING" andResizeTheDamnTextView:yourTextViewIvar]];
そしてあなたは金色になります。
おもう..
それが疑似コードです。参考までに。
より簡単な解決策は、次を使用することです。
[textViewExample sizeToFit];
これは私にとってはうまくいきます。