繁体   English   中英

滚动UITextView以显示以编程方式添加的新文本

[英]Scroll UITextView to Show New Text Added Programatically

我有一个UITextView ,我只能以编程方式向其中添加文本。 例如,粘贴粘贴板上的文本。 所以我有以下几点:

UITextView* _pastedText;
_pastedText = [[UITextView alloc] initWithFrame:pastedTextFrame];
_pastedText.editable = NO;
_pastedText.selectable = NO;

当我(以编程方式)添加新文本时,文本视图将滚动到顶部(无动画)。 我不会触发此滚动; 我认为这是默认行为?

如何使文本视图滚动,以便可以看到新的视图?

附加信息

我在这里看到了许多相关的问题/答案。 我发布了这个问题,因为使用以下代码,我看到了不良行为。 这是我正在使用的代码:

- (void)addText:(NSString*)text
{
    NSString* textToAdd = text;

    BOOL previouslyHadText = _pastedText.text.length > 0;
    if (previouslyHadText) {
        textToAdd = [NSString stringWithFormat:@"%@\n%@", _pastedText.text, text];
    }

    NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = _lineSpacing;
    NSDictionary *attribute = @{ NSParagraphStyleAttributeName : paragraphStyle,
                                 NSFontAttributeName : [UIFont systemFontOfSize:18.0] };

    _pastedText.attributedText = [[NSAttributedString alloc] initWithString:textToAdd attributes:attribute];

    if (previouslyHadText) {
        NSRange range = NSMakeRange(_pastedText.text.length - 1, 1);
        [_pastedText scrollRangeToVisible:range];
    }
}

我在此方面取得了一些成功,但看到以下错误/问题:

方案1:

  • 文本视图中包含文本,内容的顶部可见
  • 我添加了文本,它成功滚动以查看新文本
  • 我手动滚动textview
  • 手动滚动后,如果我添加更多新文本,则文本视图将首先滚动到顶部(按照原始行为), 然后我的显式滚动将滚动到底部

方案2:

  • 文本视图开始为空
  • 添加需要文本视图滚动的新文本; 没有滚动出现
  • 我手动滚动文本视图
  • 添加新文本; 现在确实发生了滚动,但是在场景1中出现了从上到下的先述

我如何(需要?)禁用隐式滚动(方案1)?

我需要怎么做才能在手动滚动视图之前进行滚动(场景2)?

似乎您正在尝试执行与我在此处尝试执行的操作非常相似的操作尽管您正在使用scrollRangeToVisible进行滚动而不是使用contentOffset。

但是,向您添加文本后自动滚动TextView的潜在问题解决方案是在更新TextView时禁用setScrollEnabled。 你已经尝试过了吗?

[_pastedText setScrollEnabled:NO];
    _pastedText.attributedText = [[NSAttributedString alloc] initWithString:textToAdd attributes:attribute];
[_pastedText setScrollEnabled:YES];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM