相关疑难解决方法(0)

每次更改文本时,如何强制UITextView滚动到顶部?

好的,我遇到了一些问题UITextView.这是问题所在:

我添加了一些文字UITextView.然后用户双击以选择某些内容.然后我改变UITextView(以编程方式如上)和UITextView 滚动到页面底部的文本,其中有一个光标.

但是,这不是用户点击的地方.UITextView无论用户点击何处,它始终滚动到底部.

所以这是我的问题:UITextView每次更改文本时,如何强制滚动到顶部?我试过contentOffsetscrollRangeToVisible.都没有工作.

任何建议,将不胜感激.

iphone uitextview ios

95
推荐指数
18
解决办法
7万
查看次数

将UITextView滚动到底部

我正在创建一个有UITextView一个按钮的应用程序.

当我点击按钮时,会添加一些文字UITextView.

但是当单击按钮时,我不想向下滚动到文本字段的底部,以便用户可以看到添加的最后一个文本.

如何使UITextView向下滚动到底部?

我试过了:

int numLines = LogTextView.contentSize.height / LogTextView.font.lineHeight+1;
NSLog(@"%d",numLines);

NSUInteger length = self.LogTextView.text.length;
self.LogTextView.selectedRange = NSMakeRange(0, length);
Run Code Online (Sandbox Code Playgroud)

但它不会起作用......

我也尝试过:

self.LogTextView.contentSize=CGSizeMake(length,0);
Run Code Online (Sandbox Code Playgroud)

uitextview ios

26
推荐指数
6
解决办法
3万
查看次数

以编程方式滚动到textView的底部

我创建了一个按钮,为textView添加了一些文本,我希望它在按下时自动滚动到底部,以便用户能够看到添加的新文本.
我无法在Swift中使用解决方案,因为我不了解Objective-C.有谁知道如何在Swift中滚动到textView的底部?谢谢.

ios swift

23
推荐指数
4
解决办法
1万
查看次数

UITextView在删除/插入文本后向上滚动

我一直在为iOS 7重写我的应用程序.它现在使用新的TextKit API.我差不多完成了,但是还有一个问题让我头疼,因为我已经开始进行过渡了.

问题:当我在UITextView中输入文本时,视图会向上滚动以隐藏光标.很难确定模式,但它似乎发生在我删除一行后,下面的文字必须向上移动.但是只有第二次我删除了一行而且只删除了文档中的某些行(通常是只有换行符但不总是......的行)

我尝试在stackoverflow上使用这些解决方案:

如何在输入时阻止UITextView向上滚动

插入每个新行后UITextView继续滚动,因此行不可见(iPhone OS)

在iOS 7中滚动到UITextView的底部不稳定

还有许多其他问题,当在UITextView中使用UITableView时,滚动无法正常工作.我认为我没有表格视图.

我想指出我已经将UITextView子类化,并发现它绝对是iOS 7调用,不仅向上滚动视图.而且,更奇怪的是,当您按下后退按钮(从UITextView中删除一个字符)时,它会发送两条消息textViewDidChangeSelection:.发生问题时,这是调用堆栈.(当问题没有发生时,我仍然得到委托的两个调用textViewDidChangeSelection:......这似乎是正常的):

  • UITextView委托textViewDidChangeSelection:包含要删除的字符的位置,长度为1.(即1050,1)
  • textViewDidChangeSelection:再次调用UITextView委托并包含相同的位置但长度为零.(即1050,0)
  • scrollViewDidScroll(最多3次.但通常只有一次)
  • 然后iOS 7调用UITextView.scrollRangeToVisible:w/FIRST调用的范围{1050,1}.这对我来说毫无意义.我知道这是在内部调用的,而不是来自我的任何代码,因为这个内部API被调用,_ensureselectionvisible无需追溯到我可能用来调用滚动事件的函数.

据推测,前两个调用只是选择字符,然后在内部调用deleteBackwards.那讲得通.不过,我之后会失明.我不知道为什么它会滚动或为什么它会调用scrollRangeToVisible:WRONG范围.

通过在用户编辑文本时UITextView.scrollRangeToVisible:返回w/o调用[super scrollRangeToVisible],我已经能够通过覆盖来缓解这个问题.我这样做是通过覆盖一些scrollview委托调用并设置一个标志,表示不能进行滚动.对我来说,这是一个巨大的UGLY黑客,在某些情况下仍然会出现问题 - 比如当我在第一次编辑时进入视图,有时当滚动视图停止减速时.

简而言之,正在发生的是滚动事件发生(可能是由于前一行向上移动)而iOS由于某种原因认为光标不在视图中.更令人好奇的是,即使提供了错误的范围,它确实提供了正确的位置,然后将其滚动到视图中的错误位置.更令人好奇的是,它只发生在某些条件下,而只发生在条件发生的第二个实例中.我唯一能想到的是,在删除文本后,UITextView的高度无法正确计算,并且它认为文本位于与实际位置不同的位置.

提前致谢!

更新:

我设置了我之前谈到过的标志scrollViewDidScroll:,它不会阻止其他情况下的跳跃.但是,仍然存在向后删除文本仍会跳转到屏幕的情况.在视图仍然跳跃的情况下,更奇怪的是我发现我[super scrollRangeToVisible]无法被调用!因此,在ADDITION内部发生了一些事情,导致视图滚动.

更新:

它似乎在613点到670点之间跳跃.我不确定是什么导致了分数差异.它跳跃的行数也有所不同.我怀疑条件之间必须有类似的东西.此外,当scrollViewDidScroll:被调用时,我验证了textView.selectedRange.location此调用和委托textViewDidChangeSelection:调用之间的相同.

objective-c uitextview uitextviewdelegate ios

5
推荐指数
1
解决办法
3438
查看次数

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

以下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)];
}
Run Code Online (Sandbox Code Playgroud)

目标是当文本从底部开始运行时,具有与XCode控制台相同的向下滚动行为.不幸的是,setText导致视图重置为顶部,然后我再次使用scrollRangeToVisible向下滚动.

这在iOS7中通过上面的代码得到了解决,但是在上周升级到iOS8后,该解决方案似乎不再适用了.

如果没有跳跃行为,我无法弄清楚如何能够流畅地使用它?

scroll uitextview settext contentoffset ios8

5
推荐指数
2
解决办法
3794
查看次数