UIScrollView - 为新的 contentSize 设置适当的 contentOffset 会产生不需要的空白空间
Posted
技术标签:
【中文标题】UIScrollView - 为新的 contentSize 设置适当的 contentOffset 会产生不需要的空白空间【英文标题】:UIScrollView - setting proper contentOffset for new contentSize yields undesirable empty space 【发布时间】:2011-10-04 13:16:28 【问题描述】:我现在一直在玩 UIScrollView。我正在尝试根据各种因素将子视图插入到滚动视图中。因为我的滚动视图只能在垂直方向滚动,所以我会在当前可见视图之前或之后插入子视图。
所以,假设我当前可见视图的帧是 (0,0,320,480),scrollView 的 contentSize 是 (320,480),当前 contentOffset 是 (0,0)
当我想在 currentView 上方插入 subview 并保持 currentView 处于焦点时,我将新的 subview 插入位置 (0,-480,320,480) 并将 scrollView 的 contentSize 更改为 (320, 960),同时保持 contentOffset与 (0,0) 相同。
令人惊讶的是,UIScrollView 在 currentView 之后添加了“额外”空间,而不是在 currentView 上方插入它。虽然上面新插入的视图永远无法成为焦点,因为 UIScrollView 可能会从错误的 contentOffset 中假设 contentSize!
我google了一下,发现有一些others面临类似的问题,但还没有产生结果: Set starting point of content size for UIScrollView
如果我做错了什么,请告诉我?或者这是某种限制等?
谢谢!
编辑:一些threads 建议更改 contentSize 会影响 contentOffset 属性,因此为确保这不会导致问题,我仅在更改 contentSize 后更新 contentOffset 属性。即使那样我也面临同样的问题。
【问题讨论】:
【参考方案1】:你可以通过以下方式解决这个问题:
使用框架 (0,0,320,480) 添加新的子视图 将现有子视图的框架设置为 (0,480,320,480) 将 contentSize 设置为 (320,960) 将内容偏移设置为 (0,480) - 当然不是动画。因此,实际上,将所有内容向下移动 480 点
【讨论】:
【参考方案2】:来源始终是(0,0)
。如果您想在当前偏移量上方插入一些内容,您需要将当前视图向下移动480 points
,在(0,0)
添加新视图并将 contentOffset 设置为(0,480)
(并将 contentSize 设置为(320,960)
。
【讨论】:
hypercrypt & @AshleyMills - 我这样做会面临的问题是相应地改变下面的所有视图。我担心这也会导致 UI 出现故障,不是吗? 不,只要这一切都发生在运行循环的同一迭代中,它将不可见。以上是关于UIScrollView - 为新的 contentSize 设置适当的 contentOffset 会产生不需要的空白空间的主要内容,如果未能解决你的问题,请参考以下文章