UIScrollView按预期工作,但scrollRectToVisible:什么都不做

我之前使用过UIScrollView ,现在正在使用它,从来没有问题。 我现在将它添加到一个旧的应用程序,虽然它按预期工作(我可以看看内容,用我的手指滚动,所有的边界和大小设置正确,所以没有空的内容,等等),我只是无法得到scrollToRectVisible工作。 我甚至简化了这个呼叫,只是把它移到了0,0的位置上:

  [scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES]; 

或将其移动到0,200:

  [scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES]; 

我甚至做了一个快速的应用程序来testing这个,我可以得到scrollRectToVisible在那里工作,如我所料。 但在我的旧应用程序,我似乎无法做任何事情。

我可以使scrollView滚动与setContentOffset: :,但这不是我想要的。

这个scrollView及其内容是由IB在笔尖中定义的,并与IBOutlet一起使用。 我在我的应用程序来处理scrollView唯一的代码是

  [scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)]; 

(我只对垂直滚动不感兴趣)。

有没有人遇到这样的问题?

我已经比较了两个应用程序中的scrollView属性,它们是相同的。

附录:

我的scrollViews框架是:0.000000 0.000000 480.000000 179.000000

我的scrollViews contentSize是:0.000000 324.000000

它仍然像我想滚动矩形已经可见,不需要滚动。 不知道这是怎么回事。 这只是最糟糕的事情。 看起来像这样一个容易的事情来解决…

附录2:

这是我做如何做scrollRectToVisible

 CGPoint point = myRect.origin; if (![clefScrollView pointInside:point withEvent:nil]) { point.x = 0; if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height) point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height; [clefScrollView setContentOffset:point animated: YES]; } 

有关此scrollView的其他一切按预期工作,但scrollRectToVisible 。 为什么?!? 任何狂野的猜测?

一个多月后,我终于明白了。 虽然上面的替代方法运行良好,但它一直在窃听我,我不得不最终弄清楚。 原来,这是一个愚蠢的错误。

这里是我的viewDidLoad中的旧代码,我设置了scrollView:

 [clefScrollView setContentSize:CGSizeMake(clefScrollView.contentSize.width, clefView.frame.size.height)]; 

scrollView的高度或宽度的值不能为0! 我认为这超过了我,因为我认为ScrollView的大小从一个有效的大小开始,我错过了一个维度为零的事实!

这工作:

 [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)]; 

希望这可以帮助那里的人。 我肯定花了太多时间试图debugging这个。

是啊,我还没有成功scrollRectToVisible:animated:setContentOffset:animated:总是为我工作。 出于好奇,为什么你不想使用setContentOffset:animated: 这似乎是适当的解决scheme。

您可能需要检查并查看scrollView的delaysContentTouches属性设置为NO

如果从scrollView的子视图中调用方法scrollRectToVisiblesetContentOffset ,那么您的scrollView可能会通过拖延触摸来控制事物。

所以,请确保您在scrollView中设置以下内容。

 scrollView.delaysContentTouches = NO; 

您将很可能能够移动scrollView和没有animation设置为YES。

我有这样的,它没有工作

 scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, someKnownValue); 

我只是改变contentSize的高度,所以我不认为这会给我任何问题,但它没有…

不得不改变这个

 scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue); 

原来scrollView.contentSize.width是从get go中设置的有效值,所以最好给它一个具体的值

如果您没有设置“clefScrollView”的框架,上面的build议解决scheme可能仍然会出现错误。

如果上面的解决scheme被使用,仍然有相同的问题,请确保您在设置内容视图之前初始化了scollView(在本例中为clefScrollView)框架。

 clefScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,450)]; [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)]; 

有点晚,但我有同样的问题。 虽然我绝对有我的滚动视图的内容大小设置正确 – 甚至过分的身高值。 即使经过广泛的检查来validation帧和内容大小 – 仍然无法正常工作。 我不得不调整“边界”的框架高度,那么一切都很好。

我有这个问题相同的症状。scrollRectToVisible不按预期工作。 我的问题是故事板上的滚动视图有一个模糊的约束问题。 一旦这个问题得到解决,通话就可以正常工作 当scrollRectToVisible调用没有按照预期工作时,检查是另一回事。