UIScrollView - (bounces = NO) 似乎覆盖 (pagingEnabled = YES)

问题描述 投票:0回答:1

我有一个带有分页功能的 UIScrollView (因此带有 UIPageControl 并在页面之间左右拖动/轻拂的典型模型),而且我工作得很好。奇怪的是,当我想摆脱弹跳(这样就看不到左右两侧UI后面的黑色)时,突然分页不再起作用了。

换句话说,当:

scrollView.pagingEnabled = YES;
scrollView.bounces = YES;

一切正常,除了我不喜欢页面(0)和页面(length-1)处的弹跳。但当我这样做时:

scrollView.pagingEnabled = YES;
scrollView.bounces = NO;

它不再在每一页上卡入到位,而是将所有页面一起视为一个长页面。因此,似乎出于某种原因,分页依赖于弹跳,只要我能以某种方式阻止弹跳,就可以了。那么,有没有其他方法可以摆脱它呢?还是我做错了什么?

编辑: 解决方案:

@interface PagingScrollView : UIScrollView
@end

@implementation PagingScrollView

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame])
    {
        self.pagingEnabled = YES;
        self.bounces = YES;
    }
    return self;
}

- (void)setContentOffset:(CGPoint)offset
{
    CGRect frame = [self frame];
    CGSize contentSize = [self contentSize];
    CGPoint contentOffset = [self contentOffset];

    // Clamp the offset.
    if (offset.x <= 0)
        offset.x = 0;
    else if (offset.x > contentSize.width - frame.size.width)
        offset.x = contentSize.width - frame.size.width;

    if (offset.y <= 0)
        offset.y = 0;
    else if (offset.y > contentSize.height - frame.size.height)
        offset.y = contentSize.height - frame.size.height;

    // Update only if necessary 
    if (offset.x != contentOffset.x || offset.y != contentOffset.y)
    {
        [super setContentOffset:offset];
    }
}

@end
iphone user-interface pagination uiscrollview bounce
1个回答
9
投票

您最好的选择是编写一个

UIScrollView
子类并手动实现所需的行为。您应该能够从
pagingEnabled
bounces
开始,两者都设置为
YES
,然后用您自己的剪辑边缘的方法覆盖
-setContentOffset:

© www.soinside.com 2019 - 2024. All rights reserved.