繁体   English   中英

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

[英]UIScrollView - (bounces = NO) seems to override (pagingEnabled = YES)

我有一个带有分页的UIScrollView(所以典型的模型带有UIPageControl并在页面之间左右拖动/轻弹),我的工作正常。 奇怪的是,当我想摆脱弹跳(这样你不能在左侧和右侧的UI后面看到黑色)时,突然分页不再有效。

换句话说,当:

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

一切正常,除了我不喜欢页面(0)和页面(长度-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

最好的办法是编写UIScrollView子类并手动实现所需的行为。 你应该能够开始与pagingEnabledbounces都设置为YES ,然后覆盖-setContentOffset:用自己的方法夹子夹住。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM