即使设置了内容大小,UIScrollView也不会滚动
我的UIScrollView是一个~4500px的水平视图,用户需要水平滚动浏览内容。
我已经设置如下:
- (void)viewDidLoad { [super viewDidLoad]; sview.frame = CGRectMake(0, 0, 568, 320); sview.contentSize = CGSizeMake(4500, 320); [sview setScrollEnabled:YES]; }
然而,滚动视图什么都不做。 有没有什么明显的我错过了? 我已经在网上尝试每一个教程。
我有类似的问题。 我做了下面的修改,scrollView开始为我滚动:
- 选中以检查xib中的UIScrollView的“水平反弹”属性。
- 将下面的代码移动到viewDidAppear而不是viewDidLoad:
-(void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; sview.frame = CGRectMake(0, 0, 568, 320); sview.contentSize = CGSizeMake(4500, 320); [sview setScrollEnabled:YES]; }
我认为这应该可以帮到你。
我已经在这里解释过了 ,但是这个问题有很多答案,build议closures自动布局。 这解决了这个问题,但这不是真正的解决scheme。 这是我的答案:
打开自动布局的作品,但这不是解决scheme 。 如果你真的需要自动布局,那么使用它,如果你不需要它,closures它。 但这不是解决scheme的正确解决scheme。
在Auto Layout中, UIScrollView
与其他视图的工作方式不同。 这里是苹果公司关于自动布局的发布说明 ,我已经复制了有趣的一点:
以下是关于UIScrollView自动布局支持的一些注意事项:
- 通常,“自动布局”会将视图的顶部,左侧,底部和右侧边缘视为可见边缘。 也就是说,如果您将视图固定到其超级视图的左边缘,则确实将其固定到超级视图边界的最小x值。 改变超视图的边界原点不会改变视图的位置。
- UIScrollView类通过更改其边界的原点来滚动其内容。 要使用“自动布局”工作,滚动视图中的顶部,左侧,底部和右侧边缘现在意味着其内容视图的边缘。
- 滚动视图的子视图的约束必须导致要填充的大小,然后将其解释为滚动视图的内容大小。 (这不应与用于自动布局的intrinsicContentSize方法混淆。)要使用“自动布局”调整滚动视图的框架,约束必须是关于滚动视图的宽度和高度的显式,或者滚动视图的边缘必须是绑在其子树之外的意见。
- 请注意,您可以通过在视图和滚动视图的子树之外的视图(如滚动视图的超级视图)之间创build约束来使滚动视图的子视图浮动(不滚动)其他滚动内容。
然后苹果继续展示如何正确使用UIScrollView
自动布局的例子。
一般来说,最简单的解决方法之一就是在元素与UIScrollView底部之间创build一个约束。 所以在你想要在UIScrollView底部的元素中,创build这个底部空间约束:
再一次,如果您不想使用“自动布局”,请将其closures。 然后,您可以通过常用的方式设置contentSize
。 但是你应该明白的是,这是自动布局的预期行为。
首先,你必须添加一些内容到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]; }
我testing了这个代码,它运作良好。我希望这个代码会对你有所帮助。
我假设你正在你的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连接。
我也面临同样的问题。我在xib中添加了滚动视图。我还为这个滚动视图添加了一些子视图。 添加子视图后,滚动视图将停止滚动。 这个问题的解决scheme是在文件检查器的视图的xib中使用Autolayout被选中。 我没有选中它,滚动视图滚动添加子视图后。
解决scheme是取消在xib文件检查器中使用Autolayout。