UIScrollView不滚动

时间:2013-07-04 17:16:31

标签: ios ios7 uiscrollview uiscrollviewdelegate

我有一个根本不滚动的UIScrollView。如果我启用弹跳,我可以向侧面滚动足够远以查看视图外部有内容,但是当我释放时它会快速回到原点。我打开了分页,但如果我将其关闭,我会得到相同的行为。 我关闭了自动布局。 在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,但它永远不会被调用(除非我启用了弹跳,就像我之前提到的那样)。

2 个答案:

答案 0 :(得分:8)

UIScrollView仅在contentSize大于其帧大小时滚动。如果它没有滚动可能意味着它的contentSize不够大。因此,请在设置后检查contentSize的内容。

如果contentSize与您期望的那样,则检查scrollView是否为scrollEnabled。有时启用反弹会产生滚动效果的印象。此外,如果未启用滚动,则设置contentOffset也适用于该情况,因为它会根据提供的大小将内容作为参数移动。

答案 1 :(得分:3)

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