【问题标题】:Updating UITextView inside UIScrollView while scrolling makes the scrollView stop scrolling滚动时在 UIScrollView 内更新 UITextView 会使 scrollView 停止滚动
【发布时间】:2012-04-20 06:07:17
【问题描述】:
  • 我有一个 scrollView,其中包含 12 个设置为图块的 UIViews。每个 tile 都包含一个 textView。

  • scrollView 启用了分页。因此,您每页有 12 个图块,并且您可以水平滚动。

  • 每当我收到来自 API 调用的信息时,我都会更新 textView。

这是正确更新 textView,但我有一个大问题。每当更新发生时,scrollView 实际上会滚动到刚刚更新的视图。因此,每当我加载一列新的图块时,滚动视图会在开始加载时停止,即使它有动量!

知道是什么原因造成的吗?

如果我在没有任何信息的情况下延迟加载单元格,一切正常,所以我认为这与我更新 textView 有关。

我已经试过了:

  • 使用 NSTimer(并将其模式设置为 NSRunLoopCommonModes)。
  • 使用 NSOperationQueue 并在我需要更新 UI 更改时调用主线程。

这些都不起作用。

【问题讨论】:

  • 我的解决方案是将 UITextView 更改为 UILabel ,但什么也没发生。如果有人真的有答案,我会保持开放状态。
  • 你是说改成 UILabel 解决了这个问题吗?尝试在更新时将 UITextView 可编辑属性更改为 NO,看看是否有帮助。确保在更新文本值时将 UITextView 上的委托设置为 nil。

标签: objective-c ios uiscrollview uiimageview scroll


【解决方案1】:

我认为解决方案在您的帖子中: “使用 NSOperationQueue 并在我需要更新 UI 更改时调用主线程。”

当 scrollView 调用 willScroll 时,停止当前正在下载的图像,当滚动视图停止滚动并调用其委托方法时,启动新队列以下载图像。

【讨论】:

  • 我已经删除了 NSOperationQueue(现在一切都在主线程上),它仍然无法正常工作。
【解决方案2】:

我的建议是使用仪器调试它。在 Instrument 中有一个名为“Time profiler”的跟踪模板,您可以实际看到您的应用程序在每个任务上花费了多少时间。 但是如果你正在更新 textViews,当然主线程会被阻塞,所以滚动视图会停止滚动,直到所有的 textViews 都被更新。所以我的建议是调整性能。 也许你在每个 textView 中加载了太多东西?

【讨论】:

  • 我只是在更新 textViews 的 text 属性。不幸的是,我没有时间尽快回复,但我一定会用我最终找到的任何东西来更新这篇文章(正如我在上面的评论中说我已将其更改为 UILabel)。
猜你喜欢
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多