4

我有一个根本不滚动的 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];
}

我已经尝试实现UIScrollViewDelegateand 覆盖scrollViewDidScroll,但它从未被调用(除非我启用了弹跳,就像我之前提到的那样)。

4

2 回答 2

8

UIScrollView仅在contentSize大于其帧大小时滚动。如果它不滚动可能意味着它contentSize不够大。所以contentSize设置后检查它是什么。

如果contentSize是你期望的那样,那么检查scrollView是否是scrollEnabled。有时启用反弹会产生滚动正在工作的印象。此外,如果未启用滚动,则contentOffset在这种情况下也可以设置工作,因为它会根据提供的大小作为参数移动内容。

于 2013-07-04T17:42:32.803 回答
3

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

于 2014-05-26T02:08:58.633 回答