首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在增加内容大小时防止内容偏移

如何在增加内容大小时防止内容偏移
EN

Stack Overflow用户
提问于 2017-04-08 06:12:53
回答 1查看 117关注 0票数 3

tl;博士,我不希望在UIScrollView's内容窗口顶部增加UIViews的大小,从而将内容向下推。

我有一个UIScrollView,它显示多个UIStackViews的列表,UIStackViews的好处之一是,当您将isHidden = false设置为它的一个子视图时,它会自动调整大小以补偿新视图。

现在,每个列表项都有一个这样的UIStackViews,用户可以同时按一个按钮将isHidden = false设置为每个列表中的一个子视图。这意味着,每个列表项将增加一个与未隐藏视图的高度相等的数量(每个堆栈视图的高度相同)。

如果滚动视图的contentOffset为零,那么没有问题,因为所有的高度增加都会将所有其余的内容向下推,并且在所有视图未隐藏之后,用户仍将位于滚动视图的顶部。

问题是当用户不在滚动视图的顶部时。在这种情况下,用户按下取消所有视图的按钮,高度的增加会将所有视图向下推,呈现向上滚动的外观。用户在列表中滚动的越远,其上方的视图就越多,当用户按下按钮时,内容的移动也就越大。

我正在寻找的行为与用户在滚动到视图顶部时按下按钮时的行为相同,但在任何滚动位置都是如此。换句话说:不管用户在哪里滚动,当他们按下按钮时,唯一被向下按下的视图是滚动视图内容窗口顶部下面的视图。

知道怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-10 20:02:45

好吧,让我看看我是否正确理解你的问题。

这是滚动视图的状态

代码语言:javascript
运行
复制
 A
 B
 C
 D
 E

当用户按下“展开所有”按钮时,如下所示:

代码语言:javascript
运行
复制
 A
 -1
 -2
 -3
 B
 -1
 +-a
 +-b
 -2
 C
 -1
 -2
 -3
 D
 -1
 -2
 E
 -1
 -2
 -3
 -4

问题是,如果用户当前正在查看

代码语言:javascript
运行
复制
+---+
|D  |
|E  |
+---+

(这是列表中的第4和第5项)他们最终在扩大的列表中看到:

代码语言:javascript
运行
复制
+---+
|B  |
|-1 |
+---+

但是他们应该看到他们以前看过的D项目。

我可能会建议使用UITableView,因为您可以存储当前可见的TableViewCells,然后当视图动画时,滚动到当前单元格(这应该使其相对处于视图中)。

在您的示例中,我建议的UIScrollView是捕获当前可见子视图(使用当前的contentOffset/Size和子视图的框架),然后在视图动画化其大小转换之后找出它们在哪里,然后滚动到新位置。

正如我前面提到的,这是一项更适合于UITableViewUICollectionView的任务,操作系统跟踪和缓存父对象,并且有关于插入/删除行/单元格的特定规则。

HtH

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43290830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档