UIScrollView不向下滚动

时间:2012-07-19 14:44:42

标签: ios uiscrollview scroll

我遇到了一个奇怪的问题,scrollview没有向下滚动,只向上滚动。我的应用中有scrollview,请查看我的编码

.....

self.scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320,427)];

[self.view addSubViews: self.scrollView];

UIView *blueView = [[UIView alloc] initWithFrame: CGRectMake(0, 47, 320, 320)];

blueView.backgroundColor = [UIColor blueColor];

[self.scrollView addSubViews: blueView];

self.scrollView.contentSize = CGSize(320, 640);

....

我的问题是无论我改变了什么价值contentSize,我的ScrollView只向上滚动,而不是向下滚动。我希望用户可以从原始位置将blueView移动到iPhone屏幕的顶部或底部。

你有这个问题吗?

2 个答案:

答案 0 :(得分:3)

问题

您的问题似乎与blueView scrollViewblueView的定位有关。您将CGRect的框架设置为(0, 47, 320, 320) blueView。当您像这样设置框架时,您隐含的一件事就是:

  

scrollView的上边缘比scrollView的上边缘低47点。

这是一个非常有效的说法,但它正是导致你描述的问题的原因。 (0, 0, 320, 480)不会向下滚动,因为它默认设置为在视图中启用rect contentSizeUIScrollView属性仅指示scrollView内的内容大小,而不是其定位。当你设置它时,你基本上是在告诉scrollView

  

从您的内容来源开始,内容宽320点,高640点。

因此,(0, 0)不会向上滚动,因为据他所知,在坐标contentSize之上没有内容。


解决方案

要获得所需的功能,您需要执行三个步骤。

  1. blueView设置得足够大,以允许blueView一直向上和向下滚动。
  2. scrollView放在scrollView的垂直中心。
  3. 滚动blueView,使其最初以contentSize
  4. 为中心

    • blueView设置得足够大,以允许contentSize一直向上和向下滚动。

    我们想要计算CGSize属性的正确值。它属于width类型,因此我们需要两个部分:heightwidth320很简单 - 因为您似乎不想要水平滚动,只需将其设置为屏幕宽度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,使其最初以- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
    • 为中心

    如果您选中Apple UIScrollView documentation,则会看到实例方法scrollView。这正是您以编程方式滚动blueView所需的内容。你想要的矩形是以CGRect targetRect = CGRectMake(0, scrollView.contentSize.height / 2.0 - 240, 320, 480); [scrollView scrollRectToVisible:targetRect animated:NO]; 为中心的矩形,具有iPhone屏幕的大小。所以:

    viewWillAppear

    确保在{{1}}中滚动,以便在用户看到视图时立即就绪。

    那应该是它。如果您有任何问题,请告诉我们!

答案 1 :(得分:2)

scrollView的内容大小应该是它所持有的视图的大小。这就是代码应该是这样的,尝试这样的事情。

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(X, Y, W, H1)];
UIView * blueView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, W, H2)];
self.scrollView .contentSize = blueView.frame.size;
[self.scrollView addSubview:blueView];
[self.view addSubView: self.scrollView];

感谢莱利。这里,H1是UIScrollVIew的高度,H2是blueView的高度和(H1