【问题标题】:how to Load only visible subviews in UIScrollIVew如何在 ScrollVIew 中仅加载可见子视图
【发布时间】:2015-07-02 14:51:27
【问题描述】:

我在 UIScrollView 中加载我的 Feed 数据(feedArray),我一次在 Scrollview 中加载 10-10 条记录。

第 1 步:首先我从我的网络服务中将 10 条记录放入我的 feedArray。

第 2 步:现在我正在 UIScrollView 中加载 10 条记录,现在非常好。

第 3 步:现在当我再次调用 web 服务时,我又得到了 10 条记录,现在我再次将它们添加到 feedArray 中,feedArray 计数现在是 20 条记录。和 UIScrollView For 循环运行 20 次

第4步:像这样我会调用webservice的次数,每次feedArray都会增加10条记录。

结果:在滚动视图中加载子视图数量后,当达到 250 条记录时,我的滚动视图卡住并且滚动非常慢,最后在所有 ios 设备中崩溃。

由于 UIScrollView 中的子视图重载导致了所有这些问题,所以我需要克服这些问题。

注意:我在滚动视图中加载了 19 种类型的提要,每个提要包含多个子视图,每个提要是一个带有子视图数量的 UIView。

任何帮助将不胜感激。

谢谢你们。

【问题讨论】:

  • 你没有使用 UITableView 的任何原因?
  • 是的,我有 19 种不同大小的提要会出现,所以我不能使用 19 种类型的自定义单元格,这就是我不使用 UITableView 的原因。还有一件事我的整个应用程序没有使用任何 AutoLayouts 和 Sizeclasses。
  • 我为 UIView 创建了一个 Category 类,并在 App 中的所有 UIScrollViews 中使用它们。
  • 19 个自定义单元格没有错

标签: ios objective-c uiview ios8 uiscrollview


【解决方案1】:

我猜你应该使用 UITableView。您的滚动视图变慢的原因是它无法为所有不同的子视图设置动画。 UITableViews 通过隐藏不可见的视图来处理这个问题。

更多信息 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/

【讨论】:

    【解决方案2】:

    这里推荐使用 UITableView 和 UICollectionView。
    由于两者都有单元重用机制,不会影响应用的运行时内存。

    【讨论】:

      【解决方案3】:

      为什么不使用 UICollectionView 和 UICollectionViewController 类? UICollectionViewController 参考Here

      【讨论】:

        【解决方案4】:

        从逻辑上讲,您可以按如下方式执行此操作,但此操作过于昂贵。为了解决您的问题,我建议 UICollectionView 以任何方式检查滚动视图的代码(不推荐)。

        CGRect intersectRect= CGRectMake(0,scrollView.contentOffset.y,scrollView.frame.size.width, scrollView.frame.size.height);
        
        for (UIView *subview in scrollView.subviews )
        {
            if (CGRectIntersectsRect(intersectRect, subview.frame)) // checking for intersection
            {
                // views in this condition are visible 
            }
        
            else
            {
                // views in this condition are invisible
            }
        }
        

        将此代码放在一个方法中,并在scrollview委托方法scrollViewDidEndDecelerating中调用该方法:

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多