UIScrollView contentSize问题 - 使用示例代码

时间:2011-05-28 16:19:30

标签: iphone objective-c ios ios4 uiscrollview

在我的视图中,我创建了一个宽度为320,高度为70的滚动视图。

响应用户触摸按钮,我展开了滚动视图,因此它的大小为380(h)x 320(w)。

此代码如下所示:

CGRect scrollviewFrame = CGRectMake(0, 30, 320, 380);
[scrollView setFrame:scrollviewFrame];
[self layoutScrollImages:YES];
CGSize srect =  CGSizeMake([scrollView bounds].size.width, (kNumImages * (kScrollObjHeight + 10)));
[scrollView setContentSize:srect];

上述代码段中提到的常量定义为:

const CGFloat kScrollObjHeight  = 80;
const NSUInteger kNumImages     = 100;

当我调试这个项目时,我可以看到直立是320(宽)x 8000(高);但是我的问题是可滚动区域(用户实际可以触摸以滚动滚动视图)保持与原始大小相同。

我显然错过了一些东西,有人知道它是什么吗?

创建了一个示例项目来说明我遇到的问题,可在此处找到:http://dl.dropbox.com/u/9930498/ScrollViewTest.zip

3 个答案:

答案 0 :(得分:2)

您的示例中的问题是您有一个非常奇怪的结构来加载您的视图。因此,您添加到DetailScrollView实例的视图是DetailScrollView.xib的根视图,而不是scrollview本身,我相信这是您所期望的。

解决问题的最快方法是调整DetailScrollView.xib中的根视图以自动调整宽度和高度。

答案 1 :(得分:0)

UIView无法响应超级视图范围之外的触摸。在您的示例中,您似乎展开了滚动视图,但滚动视图的父级仍然只有100个单位高。

答案 2 :(得分:0)

您应该将scrollView想象成一个窗口,窗口中我指的是scrollView的框架,它也是scrollView检测到您的触摸的坐标。通过将contentView设置为320(w)x 8000(h),您只需更改滚动视图的内容,即该窗口后面的完整区域。

通过展开内容视图,scrollView可以滚动更广泛的区域,但是为了检测更大的矩形中的触摸,您应该更改滚动视图的框架。