【问题标题】:UITextView not scrolling in a loopUITextView 不循环滚动
【发布时间】:2014-06-01 11:58:46
【问题描述】:

我有这个循环更新的 UITextView。在每个循环中,文本都会附加到文本视图的末尾。文本视图更新但不滚动以显示文本视图的结尾。

我用来追加文本的方法是:

- (void)appendText:(NSString*)text toTextView:(UITextView *)textView
{
  dispatch_async(dispatch_get_main_queue(), ^{
    NSAttributedString* attr = [[NSAttributedString alloc] initWithString:text];
    [[textView textStorage] appendAttributedString:attr];
    [textView scrollRangeToVisible:NSMakeRange([[textView text] length], 0)];
    [textView setNeedsDisplay];
    [textView setNeedsLayout];
  });
}

文本视图随文本更新,但继续只显示顶部。

这是为 iOS 7+ 编译的。

关于 SO 的其他答案并没有解决这个问题。

有什么线索吗?

【问题讨论】:

    标签: ios7 uiscrollview xcode5 uitextview uiscrollviewdelegate


    【解决方案1】:

    您可能希望看到以下内容: https://github.com/steipete/PSPDFTextView

    基本上,您需要给 UITextView 一些时间来进行计算。不要立即滚动,在尝试滚动文本视图之前等待片刻(~0.2 秒)。并且,避免在文本末尾有空行。您需要在最后一行添加至少一个字符。 (空间对我有用)

    【讨论】:

      【解决方案2】:

      this solution 没有用吗? (不知道你的循环是如何实现的,我无法复制错误行为;从 NSTimer 触发你的方法对我来说效果很好。)

      基本上,在调用 scrollRangeToVisible: 之前立即禁用 UITextView 上的滚动,并在之后立即重新启用滚动:

      - (void)appendText:(NSString*)text toTextView:(UITextView *)textView
      {
        dispatch_async(dispatch_get_main_queue(), ^{
          NSAttributedString* attr = [[NSAttributedString alloc] initWithString:text];
          [[textView textStorage] appendAttributedString:attr];
          textView.scrollEnabled = NO;
          [textView scrollRangeToVisible:NSMakeRange([[textView text] length], 0)];
          textView.scrollEnabled = YES;
          [textView setNeedsDisplay];
          [textView setNeedsLayout];
        });
      }
      

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      • @iwillnotexist-idonotexist 我已经编辑了我的答案以包含解决方案的描述。感谢您的建议。
      • 在某种程度上我不应该被感谢;我的评论文本实际上是对至少有 500 或 2000 个代表(不确定)的审阅者可用的预制回复,他们正在审查以某种方式标记的问题。但看起来响应的“好”已经得到验证。无论如何,+1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      相关资源
      最近更新 更多