我有一个根本不滚动的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
,但它永远不会被调用(除非我启用了弹跳,就像我之前提到的那样)。
答案 0 :(得分:8)
UIScrollView
仅在contentSize
大于其帧大小时滚动。如果它没有滚动可能意味着它的contentSize
不够大。因此,请在设置后检查contentSize
的内容。
如果contentSize
与您期望的那样,则检查scrollView是否为scrollEnabled
。有时启用反弹会产生滚动效果的印象。此外,如果未启用滚动,则设置contentOffset
也适用于该情况,因为它会根据提供的大小将内容作为参数移动。
答案 1 :(得分:3)
您应该在contentSize
内设置viewDidLayoutSubviews
。它在视图生命周期中已经足够晚了,因为它不能被任何其他方法重置,并且不需要你检查视图是否是第一次滚动。