ios:从 UIScrollview 添加和删除视图

Posted

技术标签:

【中文标题】ios:从 UIScrollview 添加和删除视图【英文标题】:ios: Adding and removing views from UIScrollview 【发布时间】:2015-07-24 18:48:42 【问题描述】:

我正在尝试使用水平 UIScrollView 实现视图寻呼机。视图寻呼机可能包含许多视图。我将 UIScrollview 与 pagingEnabled 一起使用为 true。问题是我不能同时拥有内存中的所有视图,因为可能有大约 40-50 个不同的视图。所以我决定加载当前视图,它是两侧(左右)相邻的 3 个视图。当我滚动然后使用 scrollViewDidScroll 方法时,我从左侧删除一个视图并在右侧插入一个新视图。为此,我执行以下操作:

首先检查滚动是向右滚动还是向左滚动,然后是否滚动整个页面 然后(对于右滚动)我从 superView 中删除最左边的视图(即 scrollView)。 将剩余视图的 x 坐标向左移动。 在右侧添加新的子视图。 相应地更改滚动视图的内容大小。

不知何故,上述实现无法正常工作,尤其是涉及更改 x 坐标的实现。我认为我遗漏了一些东西并试图解决以错误方式在 scrollView 中操作视图的问题。这是我在 github 上实现的 link 演示项目。非常欢迎对当前实施中的问题或任何其他关于如何以其他方式实施的想法提供帮助。

注意:此代码在从第一个视图向右滑动到第二个视图时已经有一个错误,有时会发生这种情况。我也找不到任何解决方案。该问题的堆栈跟踪是here。

【问题讨论】:

为什么需要移动 x 坐标?坐标应保持固定。每次滑动页面时,您应该只需要从末端删除一个视图,然后计算另一端的坐标并在那里添加新视图。 但这会在第一个位置留下一个空白空间。因此在向右移动的过程中,最左边的位置会有滚动视图背景颜色的空白。 在滚动停止之前不要删除它。该位置在屏幕外。另外,您说您在两侧都有 3 个视图的缓冲区,这些视图也在屏幕外。 我只在滚动特定偏移量后删除它们。在这种情况下,如果等于页面宽度或屏幕宽度,则特定的偏移量。 【参考方案1】:

好吧,实际上缩小和扩展 scrollView 内容大小的方法不是正确的方法(至少在我的场景中)。由于我已经将视图数量保持不变,因此我将 contentSize 设置为固定视图数量 * 屏幕宽度。现在每次我只使用removeFromSuperview() 将它们从scrollView 中删除并在scrollViewDidScroll() 方法中向scrollView 添加一个新的。

完整的工作项目更新here。

【讨论】:

以上是关于ios:从 UIScrollview 添加和删除视图的主要内容,如果未能解决你的问题,请参考以下文章

将选择器添加到动态添加的 UIScrollView 视图上的按钮

iOS UIScrollView 以编程方式从下到上添加元素

如何使用 UIScrollView 和 UIPageControl 实现图像视图库并预览下一张和上一张图像?

UIScrollView 高度不会根据视图大小动态更新?

缩放时,UIScrollview 子视图无法识别手势

访问 UIScrollView 中动态加载的标签