将新的contentSize设置为UIScrollView会使其滚动回到点x:0 y:0

时间:2009-12-31 00:32:53

标签: iphone objective-c uiscrollview

在我的应用中,我有一些逻辑可以动态更改UIScrollView的{​​{1}}。我遇到的问题是,当我更改contentSize时,它会将contentSize设置为contentOffset或类似的内容。

我猜您无法将CGPointZero设置为contentSize的中间位置。关于如何使其发挥作用的任何想法?

换句话说,我想更改UIScrollView中途的contentSize并保留其UIScrollView

提前感谢,

FBR

5 个答案:

答案 0 :(得分:1)

在我的应用程序中,我有一个UIViewController作为其根子视图的UIScrollView。该scrollView包含一个UIView,该容器充当我已嵌入的UITextView的容器。

输入足够长的字符串将导致textView展开,随后更改scrollView的contentSize导致其将其内容偏移量重置为0。看着堆栈跟踪,我能够看到{{1} }尝试在contentSize更改后立即调整内容偏移。

我创建了_adjustContentOffsetIfNecessary的子类,该子类阻止UIScrollView最初尝试调整偏移量。

_adjustContentOffsetIfNecessary

当contentSizes相同时,我们会正常调整偏移量。如果不同,我们将偏移保持不变,并将oldContentSize更新为新大小,以便下次可以接受更改偏移。

答案 1 :(得分:0)

正如您已经看到的那样,您无法通过更改contentSize来执行此操作,但您可以通过更改contentOffset并移动子视图来伪造它。 Daniel Tull DTKit library DTInfiniteGridView课程中的一个例子。

答案 2 :(得分:0)

UIScrollView的

setContentSize:将设置其contentOffset(_adjustContentOffsetIfNecessary,调用内部方法,在您的滚动视图上进行神秘的偏移更改。)

设置所需内容偏移量的一种方法是在滚动视图上执行setContentOffset:reqiredOffset animation:NO (为new contentSize计算requiredOffset。)

答案 3 :(得分:0)

我认为你可以通过保存当前的contentOffset来解决这个问题,然后在设置新的contentSize之后,你可以使用setContentOffset:animated:返回滚动的位置。希望这会有所帮助。

答案 4 :(得分:-2)

我不知道将使用哪种方法,

- (void)viewDidLoad {
    [super viewDidLoad];
    srcv.contentSize = ?;
}

这将会发生什么,取而代之的是“?”滚动模拟器