UIScrollView不滚动

我有一个UIScrollView根本不滚动。 如果我启用了弹跳function,我可以向两边滚动足够多,以便看到视图外面有内容,但是当我释放时,它会直接回到原点。 我打开了分页,但是如果closures它,我会得到相同的行为。 我有自动布局closures。 在IB中,scrollView位于MainViewController中,正确连接到IBOutlet,如下所示。

@interface MainViewController () @property (strong, nonatomic) IBOutlet UIScrollView *scrollView; @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; for (int i = 0; i < 3; i++) { CGRect frame; frame.origin.x = self.scrollView.frame.size.width * i; frame.origin.y = 0; frame.size = self.scrollView.frame.size; // I might be doing this wrong, but it returns a PosterView object just like I want it to. NSArray *view = [[NSBundle mainBundle] loadNibNamed:@"posterView" owner:self options:nil]; [[view objectAtIndex:0] setFrame:frame]; [self.scrollView addSubview:[view objectAtIndex:0]]; } self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 3, self.scrollView.frame.size.height); } 

如果我使用这种方法,它会正确滚动。

 -(void)scrollToPage:(NSInteger)page{ float pageWidth = [self.scrollView frame].size.width; [self.scrollView setContentOffset:CGPointMake(page*pageWidth,0) animated:YES]; } 

我试图实现UIScrollViewDelegate和重写scrollViewDidScroll ,但它永远不会被调用(除非我已经启用弹跳,就像我前面提到的)。

UIScrollView仅在contentSize大于其帧大小时才会滚动。 如果不滚动可能意味着它的contentSize不够大。 因此,在设置它之后检查它的contentSize是什么。

如果contentSize是你所期待的那么检查scrollView是否是scrollEnabled 。 有时启用反弹会产生滚动正在运行的印象。 而且,如果没有启用滚动,则设置contentOffset适用于这种情况,因为那么它将根据提供的大小作为参数移动内容。

你应该在viewDidLayoutSubviews设置contentSize 。 在视图生命周期中已经足够晚了,因为它不会被其他方法重置,也不需要您检查视图是否第一次滚动。