UIScrollView - (bounces = NO) semble remplacer (pagingEnabled = YES)
-
22-07-2019 - |
Question
J'ai un UIScrollView avec pagination (donc le modèle typique avec un UIPageControl et un glissement / glissement vers la gauche et la droite entre les pages), et ça fonctionne très bien. Ce qui est étrange, c’est que lorsque je voulais me débarrasser des rebonds (pour que vous ne puissiez pas voir un noir derrière l’UI), la pagination ne fonctionne plus du tout.
En d'autres termes, quand:
scrollView.pagingEnabled = YES;
scrollView.bounces = YES;
Tout fonctionne bien, sauf que je n'aime pas les rebonds à la page (0) et à la page (longueur-1). Mais quand je fais ça:
scrollView.pagingEnabled = YES;
scrollView.bounces = NO;
Il cesse de se mettre en place sur chaque page et traite toutes les pages ensemble comme une longue page. Il semble donc que, pour une raison quelconque, la pagination dépend du renvoi, ce qui est bien tant que je peux arrêter le renvoi. Alors, y a-t-il un autre moyen de s'en débarrasser? Ou y a-t-il quelque chose que je fais de travers?
EDIT: La solution:
@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
La solution
Votre meilleur choix serait d'écrire une sous-classe UIScrollView
et d'implémenter le comportement souhaité manuellement. Vous devriez pouvoir commencer avec pagingEnabled
et bounces
tous deux définis sur YES
, puis remplacer -setContentOffset:
par votre propre méthode qui coupe les bords.