Вопрос

У меня есть UIScrollView с пейджингом (то есть типичная модель с UIPageControl и перетаскиванием/перелистыванием влево и вправо между страницами), и у меня все работает нормально.Странно то, что когда я хотел избавиться от подпрыгивания (чтобы вы не видели черный цвет за пользовательским интерфейсом с левой и правой стороны), внезапно перелистывание страниц больше не работало.

Другими словами, когда:

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 подкласс и вручную реализовать желаемое поведение.Вы должны быть в состоянии начать с pagingEnabled и bounces оба настроены на YES а затем перезаписать -setContentOffset: с вашим собственным методом, который обрезает края.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top