UIScrollView更新contentSize会导致滚动问题

4
我有一个UIScrollView,在其中只有一个子视图。如果我在创建后立即设置UIScrollView的contentSize,一切都按照我的预期工作,我可以滚动。
问题在于UIScrollView内部的视图是动态大小的。宽度固定,但高度在设置滚动视图时未知。
当我在内部视图完成后执行[scrollView setContentSize:CGRectMake(...)]时,滚动视图会更新到正确的大小,并且滚动正常工作。所以基本滚动很好用。
然而,主要问题是当我在稍后的时间点执行setContentSize时,UIScrollView决定向下滚动(带有动画)到滚动视图的末端,这不是我想要的,我希望滚动保持在顶部,并且让滚动视图中的内容变大或变小,而不改变滚动位置。
我错过了什么?

我真的希望你没有将CGRect传递给“-setContentSize:”方法。 - Lily Ballard
@Kevin 感谢您发现了这个问题。应该是CGSizeMake(实际上这就是我在代码中使用的)。 - Kekoa
2个回答

6
当您调用setContentSize时,为什么不同时调用[scrollview setContentOffset:CGPointMake(0,0)];呢?这样可以使内容滚动到顶部。

2
感谢您的回复。您让我想到了为什么偏移量一开始不是0,0。问题在于,我将内容偏移量初始化为比窗口本身更高的高度,因此当内容大小发生变化时,滚动视图可能希望保持其原始位置。不初始化内容大小可以解决这个问题,并且它不会移动。 - Kekoa

0

如果要强制 UIScrollView 只能水平滚动,我一直将 contentSize 的不可滚动值设置为 0,方法如下:

CGSizeMake(contentSize.width, 0).

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接