tl;博士,我不希望在UIScrollView's
内容窗口顶部增加UIViews
的大小,从而将内容向下推。
我有一个UIScrollView
,它显示多个UIStackViews
的列表,UIStackViews
的好处之一是,当您将isHidden = false
设置为它的一个子视图时,它会自动调整大小以补偿新视图。
现在,每个列表项都有一个这样的UIStackViews
,用户可以同时按一个按钮将isHidden = false
设置为每个列表中的一个子视图。这意味着,每个列表项将增加一个与未隐藏视图的高度相等的数量(每个堆栈视图的高度相同)。
如果滚动视图的contentOffset
为零,那么没有问题,因为所有的高度增加都会将所有其余的内容向下推,并且在所有视图未隐藏之后,用户仍将位于滚动视图的顶部。
问题是当用户不在滚动视图的顶部时。在这种情况下,用户按下取消所有视图的按钮,高度的增加会将所有视图向下推,呈现向上滚动的外观。用户在列表中滚动的越远,其上方的视图就越多,当用户按下按钮时,内容的移动也就越大。
我正在寻找的行为与用户在滚动到视图顶部时按下按钮时的行为相同,但在任何滚动位置都是如此。换句话说:不管用户在哪里滚动,当他们按下按钮时,唯一被向下按下的视图是滚动视图内容窗口顶部下面的视图。
知道怎么做吗?
发布于 2017-04-10 20:02:45
好吧,让我看看我是否正确理解你的问题。
这是滚动视图的状态
A
B
C
D
E
当用户按下“展开所有”按钮时,如下所示:
A
-1
-2
-3
B
-1
+-a
+-b
-2
C
-1
-2
-3
D
-1
-2
E
-1
-2
-3
-4
问题是,如果用户当前正在查看
+---+
|D |
|E |
+---+
(这是列表中的第4和第5项)他们最终在扩大的列表中看到:
+---+
|B |
|-1 |
+---+
但是他们应该看到他们以前看过的D
项目。
我可能会建议使用UITableView
,因为您可以存储当前可见的TableViewCells,然后当视图动画时,滚动到当前单元格(这应该使其相对处于视图中)。
在您的示例中,我建议的UIScrollView
是捕获当前可见子视图(使用当前的contentOffset
/Size
和子视图的框架),然后在视图动画化其大小转换之后找出它们在哪里,然后滚动到新位置。
正如我前面提到的,这是一项更适合于UITableView
或UICollectionView
的任务,操作系统跟踪和缓存父对象,并且有关于插入/删除行/单元格的特定规则。
HtH
https://stackoverflow.com/questions/43290830
复制相似问题