31

UITextViewとボタンがあるアプリを作っています。

ボタンをクリックすると、テキストが に追加されますUITextView

しかし、ボタンをクリックしたときに、ユーザーが最後に追加されたテキストを見ることができるように、テキスト フィールドの一番下までスクロールしたくありません。

UITextView一番下までスクロールする方法は?

私は試した:

int numLines = LogTextView.contentSize.height / LogTextView.font.lineHeight+1;
NSLog(@"%d",numLines);

NSUInteger length = self.LogTextView.text.length;
self.LogTextView.selectedRange = NSMakeRange(0, length);

しかし、それはうまくいきません...

私も試しました:

self.LogTextView.contentSize=CGSizeMake(length,0);
4

10 に答える 10

80

UITextView について話している場合は、次のコードを使用できます。

-(void)scrollTextViewToBottom:(UITextView *)textView {
     if(textView.text.length > 0 ) {
        NSRange bottom = NSMakeRange(textView.text.length -1, 1);
        [textView scrollRangeToVisible:bottom];
     }

}

スイフト 4:

func scrollTextViewToBottom(textView: UITextView) {
    if textView.text.count > 0 {
        let location = textView.text.count - 1
        let bottom = NSMakeRange(location, 1)
        textView.scrollRangeToVisible(bottom)
    }
}
于 2013-05-22T18:09:56.560 に答える
17

iOS 7 以降で問題が発生した場合は、これを試してください。この SO answerを参照してください。

- (void)scrollTextViewToBottom:(UITextView *)textView {
    NSRange range = NSMakeRange(textView.text.length, 0);
    [textView scrollRangeToVisible:range];
    // an iOS bug, see https://stackoverflow.com/a/20989956/971070
    [textView setScrollEnabled:NO];
    [textView setScrollEnabled:YES];
}
于 2015-10-18T05:09:05.713 に答える
4

デリゲート メソッドを実装する必要があります。以下のコードは、改行が入力されているかどうかを確認し、入力されている場合は textView の一番下までスクロールします。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{

    if ([text isEqualToString:@"\n"]) {
        textView.contentOffset = CGPointMake(0.0, textView.contentSize.height);
    }
    return YES;
}
于 2014-02-04T12:33:48.787 に答える
1
textView.scrollRangeToVisible(NSRange(..<textView.text.endIndex, in: textView.text))

このソリューションは、わずかに異なるいくつかの注目すべきことを行います。

  • インターフェースを利用しString.Indexます(たとえばよりもパフォーマンスが高い可能性があります.count
  • 明示的な範囲開始位置を回避するa を使用しPartialRangeUpTo、コードをクリーンなワンライナーに減らします
于 2020-01-10T20:28:25.287 に答える