即使设置了内容大小,UIScrollView也不会滚动

时间:2012-10-17 00:45:35

标签: iphone ios uiscrollview

我的UIScrollView是一个~4500px水平视图,用户需要水平滚动才能查看内容。

我已将其设置如下:

- (void)viewDidLoad
{

    [super viewDidLoad];

    sview.frame = CGRectMake(0, 0, 568, 320);
    sview.contentSize = CGSizeMake(4500, 320);
    [sview setScrollEnabled:YES];
}      

然而滚动视图什么也没做。我错过了一些明显的东西吗?我已尝试过网上的每个教程。

5 个答案:

答案 0 :(得分:5)

我遇到了类似的问题。我做了以下修改,scrollView开始为我滚动:

  1. 选择以检查UIScrollView的“Bounce Horizo​​ntally”属性             在xib。
  2. 将代码后面的代码移到viewDidAppear而不是             viewDidLoad中:
  3. -(void) viewDidAppear:(BOOL)animated
    {
    
        [super viewDidAppear:animated];
        sview.frame = CGRectMake(0, 0, 568, 320);
        sview.contentSize = CGSizeMake(4500, 320);
        [sview setScrollEnabled:YES];
    
    }
    

    我认为这应该对你有帮助。

答案 1 :(得分:4)

我已经解释过它here,但是这个问题有很多答案,建议关闭自动布局。这解决了问题,但这不是真正正确的解决方案。这是我的答案:


转动自动布局有效,但不是解决方案。如果您确实需要自动布局,请使用它,如果您不需要,请将其关闭。但这不是解决方案的正确方法。

UIScrollView与自动布局中的其他视图的工作方式不同。以下是关于自动布局的Apple's release note,我已经复制了有趣的内容:

  

以下是有关UIScrollView的自动布局支持的一些注意事项:

     
      
  • 通常,“自动布局”会将视图的顶部,左侧,底部和右侧边缘视为可见边缘。也就是说,如果您将视图固定到   它的超级视图的左边缘,你真的把它钉在了它上面   superview边界的最小x值。更改边界原点   superview不会改变视图的位置。
  •   
  • UIScrollView类通过更改其边界的原点来滚动其内容。要使用Auto Layout,顶部,左侧,底部,   滚动视图中的右边缘现在表示其内容的边缘   图。
  •   
  • 滚动视图子视图的约束必须导致填充大小,然后将其解释为内容大小   滚动视图。 (这不应该与...混淆   用于自动布局的intrinsicContentSize方法。)调整滚动的大小   使用自动布局查看框架时,约束必须是显式的   关于滚动视图的宽度和高度,或者滚动视图的边缘   滚动视图必须绑定到其子树之外的视图。
  •   
  • 请注意,您可以通过创建约束使滚动视图的子视图显示为浮动(不滚动)其他滚动内容   在视图和滚动视图的子树之外的视图之间,例如   滚动视图的超级视图。
  •   
然后,Apple继续展示如何正确使用UIScrollView与自动布局。

作为一般规则,最简单的解决方法之一是在元素与UIScrollView底部之间创建约束。因此,在您希望位于UIScrollView底部的元素中,创建此底部空间约束:

enter image description here

再次,如果您不想使用自动布局,请将其关闭。然后,您可以按常规方式设置contentSize。但你应该理解的是,这是自动布局的预期行为。

答案 2 :(得分:1)

首先,您必须将一些内容添加到UIScrollSiew作为滚动的子视图,而没有UIScrollView上的内容如何滚动?这是我做的,只需将UIImageView添加到UIScrollView作为大小与UIScrollView大小相同的子视图......

在viewDidLoad方法中,尝试以下代码..

-(void)viewDidLoad
{
     UIScrollView *scroll=[[UIScrollView alloc] init];
     scroll.frame=CGRectMake(0, 0, 320, 460);
     UIImageView *imageView=[[UIImageView alloc] init];
     imageView.frame=CGRectMake(0, 0, 320,460);
     imageView.image=[UIImage imageNamed:@"chiranjeevi.jpeg"];
     scroll.contentSize = CGSizeMake(4500, 460);
     [scroll setScrollEnabled:YES];
     [scroll addSubview:imageView];
     [self.view addSubview:scroll];

}

我测试了这段代码它运行良好。我希望这段代码对你有所帮助..

答案 3 :(得分:0)

我假设您在Xib文件中添加了UISrollingView。这对你有用。

sview.delegate = self;
sview.backgroundColor=[UIColor clearColor];
[sview setCanCancelContentTouches:NO];
sview.indicatorStyle = UIScrollViewIndicatorStyleWhite;
sview.clipsToBounds = YES;
sview.scrollEnabled = YES;
sview.contentSize = CGSizeMake(320,570);
CGPoint topOffset = CGPointMake(0,0);
[sview setContentOffset:topOffset animated:YES];

另外,请确保在Xib文件中提供IBOutlet连接。

答案 4 :(得分:-1)

我也遇到了同样的问题。我在xib中添加了滚动视图。我还在此滚动视图中添加了一些子视图。添加子视图后,滚动视图将停止滚动。此问题的解决方案是在文件检查器中的视图的xib中使用了Autolayout。我取消选中它,并在添加子视图后滚动滚动视图。

该解决方案在xib中取消了文件检查器中的Use Autolayout。