如何在 ScrollVIew 中仅加载可见子视图

Posted

技术标签:

【中文标题】如何在 ScrollVIew 中仅加载可见子视图【英文标题】:how to Load only visible subviews in UIScrollIVew 【发布时间】: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 个自定义单元格没有错 【参考方案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中调用该方法:

希望对你有帮助

【讨论】:

以上是关于如何在 ScrollVIew 中仅加载可见子视图的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI ScrollView:查找当前在屏幕中心可见的子视图。子视图在 ScrollView 中的位置。偏好键。滚动视图代理

仅在 UIScrollView 内的正确位置加载可见内容

Xcode - 子视图不可见

目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?

向 UIScrollView 添加子视图

加载ios后如何扩大视图宽度