UIScrollView无法垂直滚动

4
我制作了一个iPhone应用程序,其中包含以下层次结构:。当我尝试滚动我的滚动视图时,它不会滚动。我在项目中使用了自动布局。
即使我的滚动视图的内容大小大于其高度,它仍然不会滚动。以下是我在viewDidLoad中编写的代码片段。
    UIView *tempo = (UIView *)[scrollVw viewWithTag:6];//View which is inside Scrollview

    float sizeOfContent = 0;
    for (int i = 0; i < [tempo.subviews count]; i++) {
        UIView *view =[tempo.subviews objectAtIndex:i];
        sizeOfContent += view.frame.size.height;

    }

    NSLog(@"sizeOfContent = %f", sizeOfContent);
    scrollVw.contentSize = CGSizeMake(scrollVw.frame.size.width, 1500);

    NSLog(@"scrollVw width = %f -- scrollVw height =%f",scrollVw.frame.size.width, scrollVw.frame.size.height);

    NSLog(@"tempo width = %f -- tempo height =%f",tempo.frame.size.width, tempo.frame.size.height);

日志结果:

sizeOfContent = 1500
scrollVw width = 320.000000      scrollVw height = 416.000000 
tempo width = 320.000000         tempo height =  416.000000

我哪里犯了错误?

6个回答

9
如果您正在使用自动布局,那么您的视图最终在viewDidLoad之后进行布局。因此,请将您的代码移到viewWillAppear或viewDidLayoutSubviews中,这样您就可以了解情况了。

3
请在设置您的内容大小后尝试调用此方法。
scrollVw.contentSize = CGSizeMake(scrollVw.frame.size.width, 1500);

[scrollVw layoutIfNeeded];

我将这段代码编写在viewDidLayoutSubviews方法中,它像魔法般奏效。 - bittu

1
希望这能帮到你。当你使用带有自动布局的UIScrollView时,自动布局并不像你预期的那样工作。(你的图片显示了一个红色箭头,在进入任何其他地方之前,请单击它并调整你的自动布局)。
View (main view of my UIViewController) – with
-Scroll View (UIScrollView)
--Container View 
----Content1 
----Content2 (etc)

-> 滚动视图必须至少有一个内容附加到其每个边缘,例如顶部、左侧、右侧和底部(容器视图)。

-> 不要固定滚动视图的高度、宽度,只需为其提供4个约束条件(前导、尾随、顶部和底部)。

-> 为滚动视图给出容器视图的前导、尾随、顶部和底部空间。

然后给内部内容添加约束条件。

if(self.viewScroll.contentSize.height>self.viewScroll.frame.size.height)
{
    [self.viewScroll setScrollEnabled:YES];
}
else
{
    [self.viewScroll setScrollEnabled:NO];(if you want)
}

我在其他地方看到过这个解决方案,但是当我尝试时它失败了。最后的代码片段也是不必要的吗? - stackOverFlew

1

你在哪里记录contentSize等内容?在viewDidLoad中吗?

在viewDidLayoutSubviews中显示了什么?我认为你的约束正在影响你的内容大小。


0

取消视图控制器中的自动布局,然后尝试,并确保contentsize.height大于scrollview高度。


0

我认为如果你的scrollview高度(568)大于scrollview.contentsize(例如350),那么这是可以接受的。唯一有帮助的事情是更改我们放在scrollview上的Imageview的contentmode,如下所示:

imgView.contentMode = UIViewContentModeScaleToFill;

您甚至不需要以这种方式访问方法scrollViewDidEndZooming。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接