2012-10-17 214 views
4

我的UIScrollView是一个~4500px的水平视图,用户需要水平滚动浏览内容。即使在设置内容大小后,UIScrollView也不会滚动

我已经将它设置如下:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

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

然而,滚动视图什么都不做。有没有什么明显的我错过了?我已经在网上尝试了每一个教程。

+0

设置'sview.frame' – Kevin

+0

也有。仍然不滚动。 – nworksdev

+0

你在哪里添加了代表要滚动内容的子视图? – FluffulousChimp

回答

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]; 

} 

我测试此代码它工作得很好。我希望这段代码对你有所帮助。

+0

也许尝试通过厦门国际银行添加一个UIScrollView到UIViewController的UIView的一个解决方案?这是真正的问题 – jsetting32

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连接。

+0

请.. .. @nworksdev这对您有帮助吗?对此有何更新? – TonyMkenu

+0

没有帮助我对不起......即使设置内容为3000后仍然无法滚动整个内容 – jsetting32

-1

我也面临同样的问题。我在xib中添加了滚动视图。我还为这个滚动视图添加了一些子视图。添加子视图后,滚动视图将停止滚动。这个问题的解决方案是在文件检查器的视图的xib中使用Autolayout被选中。我没有选中它,滚动视图在添加子视图后滚动。

该解决方案未取消xib中文件检查器中的使用Autolayout。

4

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


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

UIScrollView与自动布局中的其他视图的工作方式不同。这里是Apple's release note上自动布局,我已经复制了有趣的一点:

下面是关于对UIScrollView的自动布局支持的一些注意事项:

  • 一般情况下,自动布局考虑顶部,左侧,底部,并且视图的右边缘是可见边缘。也就是说,如果您将其视图的顶视图的左边缘设置为 ,那么您确实将其视为超级视图界限的最小x值的 。更改超级视图的边界原点 不会更改视图的位置。
  • UIScrollView类通过更改其边界的原点来滚动其内容。要使用“自动布局”进行此项工作,滚动视图中的顶部,左侧,底部和右侧边缘现在意味着其内容的边缘 视图。
  • 对滚动视图的子视图的约束必须导致要填充的大小,然后将其解释为滚动视图的内容大小。 (这不应该与用于自动布局的intrinsicContentSize方法相混淆。)要使用自动布局调整视图的框架大小,约束条件必须是关于滚动视图的宽度和高度的明确 ,或者必须是关于 的边缘的明确的 滚动视图必须绑定到其子视图之外的视图。
  • 请注意,您可以通过在视图和滚动视图的子树外部的视图(如 滚动视图的超级视图)之间创建约束 ,使滚动视图的子视图浮动(不滚动)在其他滚动内容上。

苹果然后继续显示例如如何正确使用UIScrollView与自动布局。

作为一般规则,最简单的解决方法之一是在元素与UIScrollView底部之间创建一个约束。再次

enter image description here

,如果你不想使用自动布局,然后将其关闭:那么,你想在UIScrollView的底部的元素,创建这个底部空间限制。然后,您可以通过常规方式设置contentSize。但是你应该明白的是,这是自动布局的预期行为。

5

我有类似的问题。我也如下修改和滚动视图开始滚动我:

  1. 选择在厦门国际银行选中“弹跳平铺”属性的UIScrollView 。
  2. 移动代码下面的代码来代替viewDidAppear viewDidLoad方法 的:
-(void) viewDidAppear:(BOOL)animated 
{ 

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

} 

我认为这应该帮助你。

相关问题