问题
看起来您的问题在于您如何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
。
这很容易; 只需设置center
blueView 的属性:
blueView.center = CGPointMake(160, scrollView.contentSize.height / 2.0);
- 滚动
scrollView
,使其最初以 为中心blueView
。
如果您查看Apple UIScrollView 文档,您会看到一个实例方法- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
。这正是您需要以scrollView
编程方式滚动的内容。你想要的矩形是以blueView
iPhone 屏幕大小为中心的矩形。所以:
CGRect targetRect = CGRectMake(0, scrollView.contentSize.height / 2.0 - 240,
320, 480);
[scrollView scrollRectToVisible:targetRect animated:NO];
确保您在 中进行此滚动操作viewWillAppear
,以便在用户看到视图时立即准备好。
应该是这样的。如果您有任何问题,请告诉我!