Masquer les cellules dans un UITableView avec des cellules statiques - et pas de mise en page automatique de collision
J'ai une table afficher le formulaire créé à l'aide de Cellules Statiques de l'IB/Storyboard. Cependant, j'ai besoin de cacher certaines des cellules au moment de l'exécution, en fonction de certaines conditions.
J'ai trouvé quelques réponses à cette question, par exemple
.. et ils se concentrent sur le réglage de la hauteur de la cellule /ligne à 0. C'est très bien, sauf que maintenant, je reçois des exceptions de mise en page automatique, car les contraintes ne peuvent pas être satisfaits. Comment puis-je obtenir autour de ce dernier problème? Puis-je désactiver temporairement la Mise en page Automatique pour une sous-vue? Est-il une meilleure façon de faire cela dans iOS7?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la meilleure façon de le faire est de simplement gérer la numberOfRowsInSection, cellForRowAtIndexPath et heightForRowAtIndexPath à déposer sélectivement certaines lignes. Voici un "codé en dur" de l'exemple pour mon scénario, vous pourriez faire quelque chose d'un peu plus intelligente intelligente permet de supprimer certaines cellules plutôt que de coder en dur comme ça, mais c'était plus facile pour mon scénario simple.
Masquer les cellules sur la table de montage séquentiel et régler la hauteur à 0:
Si vous en assurer il n'y a pas de contrainte de toucher le bord inférieur de la cellule, mise en page automatique ne devrait pas barf (testé sur iOS 6.0, 6.1, 7.0). Vous aurez toujours 'ancre' sur le bord supérieur et ont pour épingler les hauteurs. (Vous pouvez faire l'inverse et d'ancrage vers le bas, bien sûr.)
Si votre mise en page dépend à la fois le haut et le bord inférieur des postes, il peut être possible par programmation supprimer les contraintes (ils sont juste des objets, après tout).
La façon la plus simple est de changer la hauteur des sections et des lignes. Il fonctionne pour moi.
Le casher façon de le faire est d'utiliser la dynamique des cellules, réglage de la hauteur de ligne à 0 est un hack. Les cellules statiques sont très pratique, mais limité en fonctionnalités.
UITableCell
et de contrôle faites glisser les points de vente de la nouvelle sous-classe.Puis dans votre table view controller accéder à la propriété.J'ai réussi à éviter les exceptions de Mise en page Automatique en enlevant d'abord les contraintes sur la cellule
contentView
par programmation dansviewDidLoad
, puis réglage de la cellule de la hauteur à 0 dansheightForRowAtIndexPath
.J'ai trouvé un moyen qui vous permet de vous même ligne animations et fonctionne sur iOS 8.3. Tous vous avez besoin est de mettre en œuvre les tableView:numberOfRowsInSection: source de données méthode, puis ajouter/supprimer ligne par UITableView méthodes
insertRowsAtIndexPaths:withRowAnimation: et deleteRowsAtIndexPaths:withRowAnimation:.
Ici est un exemple de cacher exacte de la ligne basé sur UISwitch état:
Comme il a été mentionné ci-dessus par @algues, numberOfRowInSection: est encore UITableViewDataSource méthode, donc on n'a pas simplement savoir combien de temps sa va marcher.
La meilleure façon pour moi a été de modifier numberOfRowsInSection méthode. J'ai enlevé la source de données que je n'ai pas d'affichage. La meilleure solution pour moi, parce que tout est dans une seule fonction.
Mis en œuvre cette aussi, pour un tableview dans un StoryBoard. Mes cellules sont intégrées dans les sections d'en-tête, représenté par le cube bleu dans xcode6 de l'IB. En effet, si vous mettez en œuvre heightForHeaderInSection, heightForFooterInSection et titleForHeaderInSection,titleForFooterInSection vous pouvez accéder aux en-têtes lorsque la table est affiché, et le retour 0.0 et de néant, respectivement, et retourner la valeur 0 pour numberOfRowsInSection.
Fondamentalement, tout fonctionne bien, sauf que pour chaque cellule cachée d'une autorité de certification. 10 pixels de hauteur verticale reste de la place pour chaque cellule (section) vous cacher. Aucune idée de ce que cela pourrait être?