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的子视图中调用方法scrollRectToVisible
或setContentOffset
,那么您的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调用没有按照预期工作时,检查是另一回事。