0

UITextViewコンテンツに合わせて自動的にサイズ変更されるシンプルなものが欲しいです。

AutoLayout を使用すると、これは非常に簡単です。UITextViewビューに を追加し、2 つの制約を設定してUITextViewを左上隅に固定し、スクロールを無効にします。それだけです。

IB セットアップ

予想される動作は、文字を入力するたびに緑色のテキスト ビューのフレームのサイズが変更されることです。しかし、これは部分的にしか機能しません: 一部のテキストでは、テキスト ビューは、現在の行の末尾に新しい文字を追加するだけでなく、2 行にわたってレンダリングすることを決定します。

UITextView でのテキスト レンダリングの例

これは新しい TextKit フレームワークに関連していると推測しています。NSLayoutManagerNSTextContainerのプロパティを操作して、この動作を制御しようとしましたが、役に立ちませんでした。

また、テキスト ビューの幅を「ハードコーディング」すると (たとえば、幅の制約を使用して)、文字は行末に正しく追加されますが、テキスト ビューの水平方向の自動サイズ変更プロパティが失われることにも注意してください。

UITextView改行したくないことをにどのように示すことができますか?

編集:さらにテストした後、バグは 32 ビット アーチにのみ表示されるようです。

4

2 に答える 2

1

ちょっとしたハック (そして iOS8 で修正されることを望んでいます) ですが、次のことでそれが起こらなくなりました:

- (void)textViewDidChange:(UITextView *)textView {

    // uber hack to stop characters from jumping to the line below
    if (textView.text.length == 1 && ![textView.text isEqualToString:@" "]) {
        NSRange cursorPosition = [textView selectedRange];
        textView.text = [NSString stringWithFormat:@"%@ ", textView.text];
        textView.selectedRange = cursorPosition;
    }

    [textView invalidateIntrinsicContentSize];
}

しばらく私を悩ませたので、それが他の誰かを助けることを願っています:)

于 2014-07-08T15:03:31.583 に答える