UITextField 文本更改时 UIScrollView 滚动到底部

Posted

技术标签:

【中文标题】UITextField 文本更改时 UIScrollView 滚动到底部【英文标题】:UIScrollView scrolling to bottom when UITextField text changes 【发布时间】:2011-02-19 03:10:32 【问题描述】:

按照现在的设置,我在 UIScrollView 中有两个 UITextView。重点是 UITextViews 本身不会滚动,它们只会随着添加更多文本而变大(它们的内容大小)。 UIScrollView 处理视图的所有上下滚动,无论有多少文本(类似于 Mail.app,其中主题视图位于消息视图上方等)。也就是说,我现在遇到了一个问题。当我以编程方式将文本添加到我的 UITextView(在此代码中为 bodyText)时,UIScrollView 出于某种原因自动滚动到底部。

添加我刚刚做的文本:

NSRange selectedRange = [bodyText selectedRange];
NSString *selectedText = [bodyText.text substringWithRange:selectedRange];
bodyText.text = [bodyText.text stringByReplacingCharactersInRange:selectedRange withString:[NSString stringWithFormat:@"<b>%@</b>", selectedText]];

因此,例如,如果我有 2000 个垂直像素的文本并且当前滚动到位置 400,然后在附近的某个位置添加文本,那么 UIScrollView 将一直下降到 2000。

我试图通过继承 UISCrollView 并覆盖 -setContentOffset 来阻止它,但这会冻结所有滚动。

我的问题是,为什么它首先会一直滚动到底部?当用户单击屏幕上其他位置的按钮时添加文本,并且滚动与任何手指拖动或任何事情无关。

【问题讨论】:

【参考方案1】:

在滚动视图编程指南中你会得到:

使矩形可见

也可以滚动 矩形区域,因此它是 可见的。这个特别有用 当应用程序需要显示 当前不在的控制 可见区域进入可见视图。 scrollRectToVisible:动画: 方法滚动指定的矩形 这样它就在内部可见 滚动视图。如果动画参数 是,矩形滚动到 以恒定的速度查看。与 setContentOffset:动画:,如果 动画被禁用,委托是 发送了一个scrollViewDidScroll: 信息。如果启用动画,则 代表被发送了一系列 scrollViewDidScroll:消息为 动画进展。如果是 scrollRectToVisible:animated: 的 滚动视图的跟踪和拖动 属性也是NO。

如果启用了动画 scrollRectToVisible:animated:, 的 代表收到一个 scrollViewDidEndScrollingAnimation: 消息,提供通知 滚动视图已到达 指定的位置和动画是 完成。

所以也许你可以使用这个功能来锁定你的 UITextView 的可见性。

【讨论】:

以上是关于UITextField 文本更改时 UIScrollView 滚动到底部的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 不会正确更改文本颜色

UITextField 在编辑时更改字体

检测UITextField的焦点更改

滚动 UITableView 时自定义单元格中的 UITextField 文本正在更改

防止 UITextField 在更改 firstResponder 时取值

UITextField:更改禁用文本字段的外观