UITextView setText 不应该在 ios8 中跳到顶部

Posted

技术标签:

【中文标题】UITextView setText 不应该在 ios8 中跳到顶部【英文标题】:UITextView setText should not jump to top in ios8 【发布时间】:2014-11-20 04:43:46 【问题描述】:

以下 ios 8 代码每秒调用一次:

- (void)appendString(NSString *)newString toTextView:(UITextView *)textView 
    textView.scrollEnabled = NO;
    textView.text = [NSString stringWithFormat:@"%@%@%@", textView.text, newString, @"\n"];
    textView.scrollEnabled = YES;
    [textView scrollRangeToVisible:NSMakeRange(textView.text.length, 0)];

目标是在文本开始从底部运行时具有与 XCode 控制台相同的向下滚动行为。不幸的是,在我可以使用 scrollRangeToVisible 再次向下滚动之前,setText 会导致视图重置到顶部。

上面的代码在 iOS7 中解决了这个问题并且它工作了,但是在上周升级到 iOS8 之后,该解决方案似乎不再工作了。

如果没有跳跃行为,我无法弄清楚如何流畅地进行此操作?

【问题讨论】:

【参考方案1】:

我也遇到了这个问题。你可以试试这个。

textView.layoutManager.allowsNonContiguousLayout = NO;

参考:http://hayatomo.com/2014/09/26/1307

【讨论】:

哇..我已经解决了很长时间了..感谢您的回答。 这节省了我几个小时,谢谢! 我在解决这个问题几个小时后发现了这个。这是正确的答案。 哥们,你真是个天才! 这是正确的答案。具体来说,在设置allowNonContiguousLayout = NO 之后,您可以更改文本视图中的文本,然后滚动。 _consoleView.text = 文本; [_consoleView scrollRangeToVisible:NSMakeRange(_consoleView.text.length - 1, 1)];【参考方案2】:

以下两种解决方案不适用于 iOS 8.0。

textView.scrollEnabled = NO;
[textView.setText: text];
textView.scrollEnabled = YES;

CGPoint offset = textView.contentOffset;
[textView.setText: text];
[textView setContentOffset:offset];

我为 textview 设置了一个委托来监视滚动事件,并注意到在我恢复偏移量的操作后,偏移量再次重置为 0。所以我改为使用主操作队列来确保我的还原操作发生在“重置为 0”选项之后。

这是适用于 iOS 8.0 的解决方案。

CGPoint offset = self.textView.contentOffset;
self.textView.attributedText = replace;
[[NSOperationQueue mainQueue] addOperationWithBlock: ^
    [self.textView setContentOffset: offset];
];

【讨论】:

如果我使用的是 scrollEnabled = NO 和 scrollEnabled = YES 那么它在 iOS 9 上工作但在 iOS 8 上不工作,唯一适合我的解决方案是仅在 NSOperationQueue 中设置内容偏移量。值得为答案投票。【参考方案3】:

尝试将文本添加到 UITextView(没有 scrollRangeToVisible/scrollEnabled)。在 iOS8 SDK 中不再需要启用/禁用滚动的破解。 UITextView 自动滚动。

【讨论】:

谢谢!自从我出于测试目的需要它以来已经有一段时间了,从那以后它就被从项目中删除了。我确实记得虽然解决了它是像这样晦涩难懂的东西。现在被接受为正确答案;-) 这不是真的,滚动对我来说不是自动的。

以上是关于UITextView setText 不应该在 ios8 中跳到顶部的主要内容,如果未能解决你的问题,请参考以下文章

settext和maketext的区别

UITextView 在分页 UIScrollView 内滚动不起作用

UITextView:链接检测在模拟器中工作,而不是在设备上

Win32 SDK:ListBox 为什么不整个 LB_SETTEXT

当键盘出现时,我应该如何正确设置 UITextView 的 contentInset

初始化时如何使 UITextView 不成为焦点?