J'ai un Uiscrollview qui fait défiler un UIView assez volumineux. p>
À certains moments, je veux limiter la zone que l'utilisateur peut faire défiler l'intérieur. Par exemple, je ne voudrais peut-être que pour leur permettre de visualiser le quart inférieur de la vue. P>
Je suis capable de limiter la zone en remplaçant ScrollViewDidscroll, puis appelant SetContentOffsetSet si la vue a été défilée trop loin. Mais de cette façon, je ne peux pas le faire rebondir le rebond aussi bien que l'UISCrollView peut naturellement faire naturellement lors du défilement au-delà des limites de l'UIView. P>
Y a-t-il un meilleur moyen de limiter la zone défilable dans un Uiscrollview? p>
4 Réponses :
Je changerais la propriété contenus de la vue de défilement à la taille de la zone que vous souhaitez que l'utilisateur puisse faire défiler l'intérieur et ajuster le cadre.origin de la sous-évaluation de la limite supérieure gauche que vous souhaitez apparaître (0 , 0) par rapport à la vue de défilement. Par exemple, si votre vue est de 800 points de haut et que vous souhaitez afficher le trimestre inférieur, définissez la hauteur du contenu de 200 et définissez le composant Y de la vue.Frame.origin à -600. P>
Votre réponse était juste le bon conseil dont je devais résoudre un problème similaire que j'avais. Fondamentalement, la différence entre Uiscrollview.frame.Size et Uiscrollview.ContSeSize devient votre portion défilée autorisée. Vous pouvez jouer avec l'UIView qui est placé dans l'Uiscrollview n'importe quelle manière que vous souhaitez obtenir l'effet désiré que vous souhaitez utiliser l'UIView.frame et UIView.Size. Une fois que vous comprenez cela, la vie est bonne. Joyeux défilement! :)
Voici un exemple de solution qui encapsulée logique similaire: Github.com/ealeksandrov/eReRedictScrollView
J'ai trouvé quelque chose qui fonctionne pour moi. Il vous permet de faire défiler jusqu'à point 0,0 mais pas plus loin: Vous pouvez faire la même chose pour le haut, le bas ou la droite (x ou y) p> p> p>
Le problème avec cette méthode est que vous perdez le «rebond '» - où vous faites défiler au-delà de la région et que le rouleau s'enroule doucement lorsque vous lâchez.
Crap que vous avez raison, n'a pas lu correctement. Pourtant, peut-être que cela peut aider quelqu'un d'autre.
Une autre approche consiste à remplacer la méthode retour Cet exemple permet uniquement au code> Uiscrollview code> pour faire défiler lorsque l'utilisateur fait défiler l'utilisateur. un UiscrollView CODE> S:
- (bool) Pointinide: (CGPoint) Point de point: (uievente *) Evénement code>. < / p>
oui code> permettra à l'utilisateur de faire défiler. Retourner
NO code> ne sera pas. P>
UISCrollView code> que
Pointinide Code> Retours
NO code> à. Utile si la zone que vous ne voulez pas faire défiler de ne pas avoir d'interaction. P>
utableview code>. (A
utableview code> et deux
uIViews code> est immobéde à l'intérieur du
uiscrollview code>) p>
Une petite amélioration de la réponse de Yoko dans SWIFT 4 sera
override func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) { if scrollView.contentOffset.y > 600 { let anim = UIViewPropertyAnimator(duration: 1, dampingRatio: 0.5) { scrollView.isScrollEnabled = false scrollView.setContentOffset(CGPoint(x: 0, y: 600), animated: false) scrollView.isScrollEnabled = true } anim.startAnimation() } }