Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scroll UITextView setText在ios8中不应跳转到顶部_Scroll_Uitextview_Ios8_Settext_Contentoffset - Fatal编程技术网

Scroll UITextView setText在ios8中不应跳转到顶部

Scroll UITextView setText在ios8中不应跳转到顶部,scroll,uitextview,ios8,settext,contentoffset,Scroll,Uitextview,Ios8,Settext,Contentoffset,每秒调用以下iOS 8代码: - (void)appendString(NSString *)newString toTextView:(UITextView *)textView { textView.scrollEnabled = NO; textView.text = [NSString stringWithFormat:@"%@%@%@", textView.text, newString, @"\n"]; textView.scrollEnabled = YES

每秒调用以下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之后,该解决方案似乎不再有效


如果没有跳转行为,我想不出如何流畅地进行此操作?

尝试将文本添加到UITextView(没有scrollRangeToVisible/scrollEnabled)。可以肯定的是,在iOS8 SDK中不再需要使用启用/禁用滚动进行黑客攻击。UITextView会自动滚动。

以下两种解决方案在iOS 8.0上不适用于我

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

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

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

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

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

textView.layoutManager.AllowsNonctiguousLayout=NO


参考资料:

谢谢!我已经有一段时间不需要它来进行测试了,从那时起它就被从项目中删除了。我确实记得,是这样一个模糊的东西解决了这个问题。目前被接受为正确答案;-)这不是真的,卷轴对我来说不是自动的。哇..我已经解决这个问题很久了..谢谢你的回答。这节省了我几个小时,谢谢!我在解决这个问题几个小时后发现了这个问题。这是正确的答案。老兄,你真是个天才!这是正确的答案。具体来说,在设置allowsNonContiguousLayout=NO后,您可以在文本视图中更改文本,然后滚动_consoleView.text=文本;[_consoleviewscrollRangeToVisible:NSMakeRange(_consoleView.text.length-1,1)];如果我使用的是scrollEnabled=NO和scrollEnabled=YES,那么它可以在iOS 9上工作,但不能在iOS 8上工作,唯一适合我的解决方案是仅在NSOperationQueue中设置内容偏移量。应该为答案投票。
CGPoint offset = self.textView.contentOffset;
self.textView.attributedText = replace;
[[NSOperationQueue mainQueue] addOperationWithBlock: ^{
    [self.textView setContentOffset: offset];
}];