我遇到了一个奇怪的问题,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屏幕的顶部或底部。
答案 0 :(得分:3)
您的问题似乎与blueView
scrollView
中blueView
的定位有关。您将CGRect
的框架设置为(0, 47, 320, 320)
blueView
。当您像这样设置框架时,您隐含的一件事就是:
scrollView
的上边缘比scrollView
的上边缘低47点。
这是一个非常有效的说法,但它正是导致你描述的问题的原因。 (0, 0, 320, 480)
不会向下滚动,因为它默认设置为在视图中启用rect contentSize
。 UIScrollView
属性仅指示scrollView
内的内容大小,而不是其定位。当你设置它时,你基本上是在告诉scrollView
:
从您的内容来源开始,内容宽320点,高640点。
因此,(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
,使其最初以- (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