UIScrollView不会垂直滚动

时间:2014-08-20 10:52:28

标签: ios objective-c uiscrollview

我制作了iPhone应用程序,我有这个层次结构,

: 当我尝试滚动我的滚动视图时,它不会滚动我在我的项目中使用Autolayout

我的滚动视图的内容大小比我的滚动视图的高度大仍然不会滚动。

以下是我在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 个答案:

答案 0 :(得分:9)

如果您使用的是autolayout,那么您的视图最终会在viewDidLoad之后布局。因此,将您的代码移动到viewWillAppear或viewDidLayoutSubviews中,您应该没问题。

答案 1 :(得分:3)

请在设置内容大小后尝试调用此方法

scrollVw.contentSize = CGSizeMake(scrollVw.frame.size.width, 1500);

[scrollVw layoutIfNeeded];

答案 2 :(得分:1)

您在哪里记录您的contentSize等?在viewDidLoad?

它在viewDidLayoutSubviews中显示了什么?我认为你的约束正在弄乱你的内容。

答案 3 :(得分:1)

希望这会对你有所帮助

,当您使用带有自动布局的UIScrollView时,自动布局不会像您期望的那样工作。(您的图像显示红色箭头,然后再转到其他地方请点击它并调整您的自动布局)

View (main view of my UIViewController) – with
-Scroll View (UIScrollView)
--Container View 
----Content1 
----Content2 (etc)

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

- &GT;不要固定滚动视图的高度,宽度只给它4个约束(前导,尾随,顶部和底部)。

- &gt;将容器视图前导,尾随,顶部和底部空格赋予滚动视图。

并限制内部内容。然后

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

答案 4 :(得分:0)

从viewcontroller取消选中autolayout,然后尝试并确保contentsize.height超过scrollview高度。

答案 5 :(得分:0)

我认为滚动视图的高度(568)大于scrollview.contentsize(例如350)是可以的。唯一能帮助我的是改变我们在scrollview上放置的Imageview的内容模式:

imgView.contentMode = UIViewContentModeScaleToFill;

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