Domanda

Ho un UIScrollView con il paging al suo interno (quindi il modello tipico con un UIPageControl e trascinando / muovendo a destra e sinistra tra le pagine), e ho funzionato bene. La cosa strana è che quando volevo sbarazzarmi del rimbalzo (in modo da non poter vedere il nero dietro l'interfaccia utente sul lato sinistro e destro), improvvisamente il paging non funziona più.

In altre parole, quando:

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

Tutto funziona bene, tranne che non mi piace il rimbalzo di pagina (0) e pagina (lunghezza-1). Ma quando lo faccio:

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

Smette di scattare in posizione in ogni pagina, invece tratta tutte le pagine insieme come un'unica pagina lunga. Quindi sembra che per qualche ragione il paging dipenda dal rimbalzo, il che va bene finché posso in qualche modo fermare il rimbalzo. Quindi, c'è un altro modo per sbarazzarsene? O c'è qualcosa che sto facendo di sbagliato?

EDIT: La soluzione:

@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
È stato utile?

Soluzione

La soluzione migliore sarebbe scrivere una sottoclasse UIScrollView e implementare manualmente il comportamento desiderato. Dovresti essere in grado di iniziare con pagingEnabled e bounces entrambi impostati su YES e quindi sovrascrivere -setContentOffset: con il tuo proprio metodo che taglia i bordi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top