UITextView 不循环滚动
Posted
技术标签:
【中文标题】UITextView 不循环滚动【英文标题】:UITextView not scrolling in a loop 【发布时间】: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 的其他答案并没有解决这个问题。
有什么线索吗?
【问题讨论】:
【参考方案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。以上是关于UITextView 不循环滚动的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView和UIPageControl的使用(实现图片的循环滚动)
有没有办法在不开始滚动的情况下显示 UITextView 的滚动指示器?