将UITextView滚动到底部

Jon*_*nis 26 uitextview ios

我正在创建一个有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);
Run Code Online (Sandbox Code Playgroud)

但它不会起作用......

我也尝试过:

self.LogTextView.contentSize=CGSizeMake(length,0);
Run Code Online (Sandbox Code Playgroud)

dan*_*ata 68

如果您正在谈论UITextView,可以使用以下代码:

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

}
Run Code Online (Sandbox Code Playgroud)

SWIFT 4:

func scrollTextViewToBottom(textView: UITextView) {
    if textView.text.count > 0 {
        let location = textView.text.count - 1
        let bottom = NSMakeRange(location, 1)
        textView.scrollRangeToVisible(bottom)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ofirmalachi,您的意思是在上面的评论中写下相互矛盾的陈述吗? (3认同)
  • 不要忘记添加 [textView setScrollEnabled:NO]; [textView setScrollEnabled:YES]; (2认同)

Hon*_*uan 14

如果您在iOS 7或更高版本上遇到问题,请尝试此操作.看到这个答案.

- (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];
}
Run Code Online (Sandbox Code Playgroud)


zee*_*wan 7

使用Swift 3

let bottom = self.textView.contentSize.height - self.textView.bounds.size.height
self.textView.setContentOffset(CGPoint(x: 0, y: bottom), animated: true)
Run Code Online (Sandbox Code Playgroud)


neo*_*eye 6

斯威夫特 5

extension UITextView {
    func simple_scrollToBottom() {
        let textCount: Int = text.count
        guard textCount >= 1 else { return }
        scrollRangeToVisible(NSRange(location: textCount - 1, length: 1))
    }
}

// Usage
textView.simple_scrollToBottom()
Run Code Online (Sandbox Code Playgroud)


wol*_*fan 5

您必须实现委托方法.下面的代码检查是否输入了换行符,如果是,则滚动到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;
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ckx 5

创建一个范围,指定编码,直到最后一个字符,然后滚动到该范围 根据您的内容,除 utf8 之外的其他内容可能是合适的

let range = NSMakeRange(self.textView.text.lengthOfBytes(using: .utf8), 0);
self.textView.scrollRangeToVisible(range);
Run Code Online (Sandbox Code Playgroud)