Déplacer une vue lors du défilement dans UITableView
J'ai un UIView
avec un UITableView
- dessous:
Ce que je voudrais faire c'est d'avoir le point de vue au-dessus de la UITableView
déplacer vers le haut (de la route) lorsque l'utilisateur commence à défiler dans la table afin d'avoir plus d'espace pour les UITableView
(et viennent vers le bas lorsque vous faites défiler vers le bas de nouveau).
Je sais que c'est normalement fait avec un tableau d'en-tête de la vue, mais mon problème est que ma vue de la table est à l'intérieur d'un onglet (en fait c'est un side-scrolling de la page vue mis en œuvre à l'aide de TTSliddingPageviewcontroller
). Ainsi, alors que je n'ai qu'un haut UIView
il y a trois UITableView
s.
Est-il possible de réaliser cette opération manuellement? Ma première pensée est de tout mettre dans un UIScrollView
, mais d'après la documentation d'Apple, on ne doit jamais placer un UITableView
à l'intérieur d'un UIScrollView
, qui conduit à un comportement imprévisible.
- Je voulais juste vous demander, est le tout sous un UIViewController classe?
- L'ensemble de la scène est dans une
UIViewController
qui a une vue de la partie supérieure et un conteneur de vue de la partie inférieure. L'onglet" mesUITableViewController
sont ensuite intégrées dans le conteneur de vue.
Vous devez vous connecter pour publier un commentaire.
Depuis
UITableView
est une sous-classe deUIScrollView
, votre vue de la table de son délégué peut recevoirUIScrollViewDelegate
méthodes.Dans votre tableau de vue du délégué:
Solution pour Swift (Fonctionne parfaitement avec des rebonds activée pour faire défiler la vue):
let topConstraintRange = (CGFloat(120)..<CGFloat(300))
de 120 à 300? Ne devrait-elle pas être de 64 à 300 depuis la vue de dessus commence juste en dessous de la barre de navigation qui est de 64?topConstraint
à partir de?Swift 3 & 4:
Plus simple et rapide approche
Quelqu'un a demandé pour le code de ma solution je suis donc poster ici comme une réponse. Le crédit pour l'idée doit encore aller à NobodyNada.
Dans mon
UITableViewController
je mettre en œuvre cette méthode du délégué:scrollUserInfo
est unNSDictionary
où j'ai mis mesUITableView
à passer avec la notification (je le fais dansviewDidLoad
donc je n'ai qu'à le faire une fois):Maintenant, dans la vue contrôleur de point de vue, je veux déplacer hors de l'écran pendant le défilement-je faire dans
viewDidLoad
:Et enfin, j'ai la méthode:
previousOffset
est une variable d'instanceCGFloat previousOffset;
.topVerticalConstraint
est unNSLayoutConstraint
qui est défini comme unIBOutlet
. Il va du haut de la vue au sommet de sa superview et la valeur initiale est 0.Il n'est pas parfait. Par exemple, si l'utilisateur fait défiler de façon très agressive le mouvement de la vue peut être un peu saccadée. Le problème est pire pour les grandes vues; si la vue est assez petit il n'y a pas de problème.
J'ai ajouté quelques contraintes pour la dernière solution pour éviter certains comportements étranges en cas de défilement rapide
De créer comme cette animation,
Je sais que ce post dans les très vieux. J'ai essayé les solutions ci-dessus, mais ni a fonctionné pour moi pour essayé de mon propre, j'espère que ça peut vous aider. Ce scénario est assez commun, comme apple a suggéré de ne pas utiliser TableViewController à l'intérieur de tout le ScrollView parce que le compilateur confus quant à qui répondre, car il sera l'obtention de deux délégué de retour d'appel - l'un de ScrollViewDelegate et l'autre à partir de UITableViewDelegate.
Au lieu de cela, nous pouvons utiliser ScrollViewDelegate et de désactiver le UITableViewScrolling.
Ici lastContentOffset est CGFloat définis comme les biens
La Vue Hiérarchie est comme suit:
ViewController --> Affichage contient le ScrollView (dont le délégué de la méthode est définie ci-dessus) --> Contenir TableView.
Par le code ci-dessus, nous sommes manuellement augmentant et en diminuant la hauteur de l'affichage de la table avec la taille du contenu de la ScrollView.
N'oubliez pas de désactiver le Défilement de la TableView.