问题
看起来您的问题在于您如何blueView在scrollView. 您正在将框架设置blueView为CGRect (0, 47, 320, 320). 当你像这样设置框架时,你隐含的一件事是:
的上边缘比 的上边缘blueView低 47 点scrollView。
这是一个完全有效的说法,但这就是导致您描述的问题的原因。 scrollView不会向下滚动,因为它被设计为在默认情况下以 rect(0, 0, 320, 480)的形式开始。该contentSize属性仅指示 中内容的大小UIScrollView,而不是其位置。当你设置它时,你基本上是在告诉scrollView:
从您的内容来源开始,内容为 320 点宽和 640 点高。
因此,scrollView不会向上滚动,因为据它所知,坐标上方没有内容(0, 0)。
解决方案
您需要采取三个步骤来获得所需的功能。
- 将 设置为
contentSize足够大以允许blueView一直向上和向下滚动。
- 放在
blueView的垂直中心scrollView。
- 滚动
scrollView,使其最初以 为中心blueView。
- 将 设置为
contentSize足够大以允许blueView一直向上和向下滚动。
我们要计算contentSize属性的正确值。它的类型是CGSize,所以我们需要两部分:width和height。 width很简单——因为您似乎不想水平滚动,只需将其设置为屏幕的宽度,320. 身高有点棘手。如果您只想blueView在向上或向下滚动时触摸屏幕的顶部和底部,则需要进行一些数学运算。正确的总高度将是屏幕高度的两倍,减去blueView. 所以:
scrollView.contentSize = CGSizeMake(320, 480 * 2.0 - blueView.frame.size.height);
- 放在
blueView的垂直中心scrollView。
这很容易; 只需设置centerblueView 的属性:
blueView.center = CGPointMake(160, scrollView.contentSize.height / 2.0);
- 滚动
scrollView,使其最初以 为中心blueView。
如果您查看Apple UIScrollView 文档,您会看到一个实例方法- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated。这正是您需要以scrollView编程方式滚动的内容。你想要的矩形是以blueViewiPhone 屏幕大小为中心的矩形。所以:
CGRect targetRect = CGRectMake(0, scrollView.contentSize.height / 2.0 - 240,
320, 480);
[scrollView scrollRectToVisible:targetRect animated:NO];
确保您在 中进行此滚动操作viewWillAppear,以便在用户看到视图时立即准备好。
应该是这样的。如果您有任何问题,请告诉我!