1

正如现在设置的那样,我在 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 来阻止它,但这会冻结所有滚动。

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

4

1 回答 1

0

在 Scroll View Programming Guide 你会得到:

使矩形可见

也可以滚动矩形区域以使其可见。当应用程序需要将当前位于可见区域之外的控件显示到可见视图中时,这尤其有用。scrollRectToVisible:animated: 方法滚动指定的矩形,使其在滚动视图中可见。如果动画参数为 YES,则矩形以恒定速度滚动到视图中。与 setContentOffset:animated: 一样,如果禁用动画,则向委托发送单个 scrollViewDidScroll: 消息。如果启用了动画,则随着动画的进行,代理会收到一系列 scrollViewDidScroll: 消息。在 scrollRectToVisible:animated 的情况下:滚动视图的跟踪和拖动属性也是 NO。

如果为 scrollRectToVisible:animated: 启用了动画,则委托会收到一个 scrollViewDidEndScrollingAnimation: 消息,通知滚动视图已到达指定位置并且动画已完成。

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

于 2011-05-19T18:30:04.627 回答