9

以前のバージョンの iOS では、以下UITextViewを使用して一番下までスクロールします。

[displayText scrollRangeToVisible:NSMakeRange(0,[displayText.text length])];

また

CGFloat topCorrect = displayText.contentSize.height -[displayText bounds].size.height;
topCorrect = (topCorrect<0.0?0.0:topCorrect);
displayText.contentOffset = (CGPoint){.x=0, .y=topCorrect};

しかし、前者には、長いテキストの上部から開始し、テキストをビューに追加するたびにスクロールを下部にアニメーション化するという奇妙な効果があります。テキストを追加するときにテキストの一番下にポップダウンする方法はありますか?

4

5 に答える 5

3

将来の旅行者のために、@mikeho の投稿から構築したものを見つけました。

1)これを行う前に、が正しく設定されており、textViewが既にあるUITextViewことを確認してください。 2) インセットの準備が整い、カーソルがアクティブになったら、次の関数を呼び出します。contentInsetfirstResponder()

private func scrollToCursorPosition() {
    let caret = textView.caretRectForPosition(textView.selectedTextRange!.start)
    let keyboardTopBorder = textView.bounds.size.height - keyboardHeight!

   // Remember, the y-scale starts in the upper-left hand corner at "0", then gets
   // larger as you go down the screen from top-to-bottom. Therefore, the caret.origin.y
   // being larger than keyboardTopBorder indicates that the caret sits below the
   // keyboardTopBorder, and the textView needs to scroll to the position.
   if caret.origin.y > keyboardTopBorder {
        textView.scrollRectToVisible(caret, animated: true)
    }
 }
于 2015-08-06T19:24:46.637 に答える
0

パラメータが で逆になっていると思いますNSMakeRange場所は最初のもので、次に選択する数 (長さ) です。

NSMakeRange(0,[displayText.text length])

... 0 番目 (最初の?) の文字から始まり、文字列の全長にわたって選択範囲が作成されます。一番下までスクロールするには、おそらく最後の 1 文字を選択するだけです。

これは、Xcdoe 5.1.1 を使用した iOS SDK 7.1 で機能しています。

[textView scrollRangeToVisible:NSMakeRange(textView.text.length - 1,0)];
textView.scrollEnabled = NO;
textView.scrollEnabled = YES;

プログラムでテキストを追加するときにこれを行います。テキスト ビューは、ターミナルやコマンド ライン出力のように一番下に表示されます。

于 2014-07-29T03:55:04.947 に答える