【问题标题】:UIScrollView do not scrollUIScrollView 不滚动
【发布时间】:2013-07-02 18:23:12
【问题描述】:

我有一个根本不滚动的 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,但它从未被调用(除非我启用了弹跳,就像我之前提到的那样)。

【问题讨论】:

    标签: ios ios7 uiscrollview uiscrollviewdelegate


    【解决方案1】:

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

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

    【讨论】:

    • contentSize.width 是 960,而 frame 显然是 320,所以这应该不是问题。在 IB 中将滚动设置为启用,尝试在代码中执行此操作但没有成功!
    • 您提供的代码看起来不错。内容大小始终保持(3 * 320,480)?或者也许会以某种方式重置
    • 你是对的,它确实在 viewDidLoad 后重置!通过在您第一次尝试滚动时设置 contentSize,它现在可以工作了!谢谢。
    【解决方案2】:

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

    【讨论】:

    • +1 这是只对我有用的解决方案。此外,您必须将 scrollView 作为控制器视图的子视图(scrollView 不能直接是控制器的视图)。不过很奇怪……
    • 约束导致我的 contentSize 在 vi​​ewDidLoad 中被覆盖,但为什么约束会影响 contentSize?有时我真的很讨厌约束。
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多