UITableView à l'intérieur de UITableViewCell avec dynamique de la hauteur de la cellule
J'ai une liste dynamique des éléments, chaque élément peut avoir différentes teamplate/mise en page (et de la hauteur). Et l'un de ces types d'élément pourrait avoir une liste d'éléments à sélectionner à partir, régulièrement 5-6 lignes, chacune a différente hauteur.
Si j'essaie de le décrire plus loin, dans mon scénario, j'ai une tableview (#esclave) à l'intérieur de tableviewcells (#master-cellulaire) d'un autre tableview (#master). En outre cellules (#esclave-cellule) dans mon #esclave tableview peut avoir différentes hauteur. J'ai donc besoin de mise en page de mon #esclave pour avoir #maître automatiquement calc et mise à jour de sa taille.
J'ai le problème avec la table interne (#esclave). Dans le cas de l'auto-mise en page, afin de s'adapter à toutes les cellules de l'espace, la table sera effondré à la différence de UILabel ou d'autres contrôles. Donc ce que j'ai besoin ici, c'est de la taille prévue de #esclave de table et de régler la hauteur de l' #esclave = contenu de la hauteur de la #esclave.
J'ai trouvé poste similaire et il fonctionne si toutes les lignes ont la même hauteur, mais je suis en utilisant des lignes dynamiques de la hauteur de sorte que le tableView.contentSize.La hauteur me donne un résultat non valide (en gros, il suffit de multiplier rowNumbers * estimatedRowHeight, vous pouvez le voir sur la capture d'écran, le maître de l'élément #3 a 4 cellules intérieures). Même après l'appel de #esclave.reloadData je ne pouvais pas obtenir cette taille.
Quelle est la bonne façon de construire ce genre d'INTERFACE?
Le code Source avec un projet de test ci-joint (Xamarin.iOS)
- pourquoi avez-vous besoin tableView à l'intérieur de tableview?
- Je pense que vous êtes à la recherche pour
optional func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
- il est des exigences de conception, j'ai une liste dynamique des éléments, chaque élément peut avoir différentes mise en page (et de la hauteur). Et l'un de ces éléments pourrait avoir internes liste des éléments à sélectionner à partir, régulièrement 5-6 lignes, chacune a différente hauteur.
- Pourquoi auriez-vous besoin de plusieurs tableviews pour cela? Tu ne peux pas utiliser les sections de diviser votre tableView et insérer des cellules avec différentes hauteurs (ou même calculé automatiquement les hauteurs à l'aide de UITableViewAutomaticDimension)?
- pourriez-vous s'il vous plaît suggérer comment puis-je utiliser les sections dans mon scénario. Recommandez-vous d'aller avec une toute nouvelle section pour ce type d'élément de données au lieu d'une seule cellule?
- vous pouvez utiliser les sections pour obtenir ce que vous voulez faire, vous devriez avoir autant de sections que maître des éléments et dans chaque section, vous devriez avoir les sous-éléments @AlexeyStrakh
- maintenant, j'ai eu l'idée avec les articles. Malheureusement mes articles source se compose de différents types d'éléments, donc dans l'approche proposée, je vais aller avec une section pour les autres articles, ce qui est inattendu changement de conception. Je suis juste essayer d'introduire un nouvel élément de type avec mise en page personnalisée (table à l'intérieur). @Klinkert0728
- si j'ai bien compris, vous avez besoin d'une conception différente dans les cellules de la section?
- Oui, la conception différente pour les différents types de cellules. Dans mon exemple ci-dessus il n'y a qu'un type, et que les autres personnes.
- Vous pouvez donc avoir différents prototypes de cellules pour correspondre à chaque modèle que vous souhaitez @AlexeyStrakh
- oui bien sûr, vous pouvez voir ma réponse peut-être il peut vous aider à @AlexeyStrakh
- j'avais un scénario similaire quand j'ai mis la vue d'une collection à l'intérieur de tableviewcell j'ai fait ce travail, mais quand je défile en arrière et en avant aussi vite que je peux, j'ai eu un crash, car le délégué où ne pas avoir à intervenir assez vite et le délégué a renvoyé un néant de la cellule, j'espère que vous ne l'obtenez pas.Si vous obtenez le même crash je pense que vous devez en quelque sorte l'utilisation de sections pour gérer ce scénario.
- merci pour vous des préoccupations au sujet de l'accident, je vais le prendre en compte, le plus probable sera de faire une seule ligne de texte les éléments de ma table interne qui va me permettre de définir la table interne de la hauteur correctement et n'ont pas de problèmes avec mise en page automatique et automatique de la hauteur de la cellule de calcul
Vous devez vous connecter pour publier un commentaire.
Je viens de tomber sur le même problème il y a quelques jours,et j'ai essayé de travailler autour de.
La #master-cellule fonctionne comme une childViewController,c'est la
delegate
datasource
de la #esclave TableViewController.Mais vous cann ont pas childViewController dans le UITableViewcell.Personnaliser UITableViewCell de tenir nécessaire de propriété et actes de n ° esclave TableViewController de
delegate
datasource
,et configurer #esclaves de la cellulede la hauteur et de données.
Le vrai problème est la hauteur de #master-cellule,
func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
de la ViewController.Sinon,ajouter une méthode à #master-cellule qui renvoie la hauteur de l'ensemble de la cellule lors de sa propriété est définie.Et créer un proxy #master-cellule pour calculer la hauteur et de le retourner :
Qu'il est complexe et coûteux,mais il fonctionne.
Je pense que vous n'avez pas besoin de prendre
UITableView
à l'intérieur deUITableView
. Vous pouvez prendre plus d'une section deUITableView
. Et utiliser les différents cellReuseIdentifier. De cette façon, votre objectif sera atteint.Pour une telle mise en page ios fournir l'article en tableview, pour maîtriser les éléments de SectionView(il est délégué méthode pour sectionView -> dans laquelle vous pouvez fournir un aperçu d'une section) et différent à la section peut avoir différent type de ligne pour faire des lignes en fonction de votre besoin et de les renvoyer conformément à la section.
C'est peut-être parce que je ne connais pas le contexte de votre projet ou que vous voulez accomplir, mais tableViews à l'intérieur de la tableVIew cellules sons inutilement trivial. Plutôt que d'utiliser un maître tableView avec #esclave tableViews, il serait plus juste de casser des choses par la section en un seul tableView comme indiqué dans une réponse précédente. Il y a UITableViewDelegate méthodes visant à rationaliser ce pour vous!
vous devez d'abord obtenir de la chaîne de la hauteur la hauteur dois donner ci-dessous la tableView délégué
c'est de travailler pour moi.
Je suis en utilisant Xcode 8.3.2 et Swift3.1.
J'ai eu la même exigence, ont tout essayé, rien n'a fonctionné pour moi.
Enfin, UIStackView est ce qui a fonctionné pour moi.
Dans un tableviewcell, j'ai ajouté un UIStackView(Verticle), continuez à ajouter des sous-cellules pour que UIStackView. Et il automatiquement augmenté la hauteur de la cellule.
Vérifiez les éléments suivants pour ajouter UIStackView par programmation.
Ajout de vues en UIStackView par programmation
UITableView
fonctionnalités de son délégué méthodes, et que j'espérais obtenir trop.Si vous Utilisez de Différentes Sections et les Lignes d'utiliser le format ci-dessous, son travail pour moi,
j'ai le code du Modèle, section différente et rangée, chaque rangée de tailles différentes, j'ai donc donner ce type de code, si vous obtenez l'idée de voir le code ci-dessus, puis son utile pour vous,
ou
Si vous modifiez la hauteur du Contenu taille du texte utilisez le code ci-dessous, son calculer la taille du contenu, puis modifier la hauteur(UILabel) taille, de son travail pour moi
de l'espoir à ses précieux
oui bien sûr, vous pouvez avoir autant de prototypes de cellules que vous souhaitez par exemple vérifier ce morceau de code:
Il y a deux cellules différentes dans un seul UITableView.
Espère que cela aide.