C'est sur l'iPhone 0S 2.0. Les réponses pour 2.1 sont également très bien, bien que je ne connaisse aucune différence concernant les tableaux.
Il semble qu'il devrait être possible d'obtenir du texte à envelopper sans créer de cellule personnalisée, car a UITableViewCell
contient un UILabel
par défaut. Je sais que je peux le faire fonctionner si je crée une cellule personnalisée, mais ce n'est pas ce que j'essaie de réaliser - je veux comprendre pourquoi mon approche actuelle ne fonctionne pas.
J'ai compris que l'étiquette est créée à la demande (puisque la cellule prend en charge l'accès au texte et à l'image, elle ne crée donc pas la vue des données tant que cela n'est pas nécessaire), donc si je fais quelque chose comme ceci:
cell.text = @""; // create the label
UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];
alors j'obtiens une étiquette valide, mais le réglage numberOfLines
sur cela (et lineBreakMode) ne fonctionne pas - j'obtiens toujours du texte sur une seule ligne. Il y a beaucoup de hauteur dans le UILabel
texte à afficher - je renvoie simplement une grande valeur pour la hauteur dans heightForRowAtIndexPath
.
la source
Mise à jour de la réponse de Tim Rupe pour iOS7:
la source
Un bref commentaire / réponse pour enregistrer mon expérience lorsque j'ai eu le même problème. Malgré l'utilisation des exemples de code, la hauteur de la cellule de la vue tableau s'ajustait, mais l'étiquette à l'intérieur de la cellule ne s'ajustait toujours pas correctement - la solution était que je chargeais ma cellule à partir d'un fichier NIB personnalisé, ce qui se produit une fois la hauteur de cellule ajustée.
Et j'avais mes paramètres dans le fichier NIB pour ne pas envelopper le texte, et n'avoir qu'une ligne pour l'étiquette; les paramètres du fichier NIB remplaçaient les paramètres que j'avais ajustés à l'intérieur du code.
La leçon que j'ai prise était de m'assurer de toujours garder à l'esprit l'état des objets à chaque instant - ils n'ont peut-être pas encore été créés! ... hth quelqu'un sur toute la ligne.
la source
Si nous devons ajouter uniquement du texte dans la
UITableView
cellule, nous n'avons besoin que de deux délégués pour travailler (pas besoin d'ajouter des éléments supplémentairesUILabels
)1)
cellForRowAtIndexPath
2)
heightForRowAtIndexPath
Cette solution a fonctionné pour moi: -
Ici, la chaîne
mutArr
est un tableau mutable à partir duquel je récupère mes données.EDIT: - Voici le tableau que j'ai pris.
la source
Désormais, les vues de table peuvent avoir des cellules auto-dimensionnées. Configurez la vue de la table comme suit
tableView.estimatedRowHeight = 85.0 //use an appropriate estimate tableView.rowHeight = UITableViewAutomaticDimension
Référence Apple
la source
J'utilise les solutions suivantes.
Les données sont fournies séparément dans un membre:
La manipulation peut être facilement effectuée
cellForRowAtIndexPath
. Définissez la cellule / définissez la police et attribuez ces valeurs au résultat "cellule". Notez que lenumberoflines
est mis à "0", ce qui signifie prendre ce qui est nécessaire.Dans
heightForRowAtIndexPath
, je calcule les hauteurs du texte enveloppé. La taille du corsage doit être liée à la largeur de votre cellule. Pour iPad, ce sera 1024. Pour iPhone et iPod 320.la source
J'ai trouvé cela assez simple et direct.
par exemple:
Cela peut être ou non la meilleure approche / standard pour le faire, mais cela a fonctionné dans mon cas.
la source
Essayez mon code rapidement. Ce code fonctionnera également pour les étiquettes UIL normales.
Maintenant, appelez simplement comme ça
la source
Je pense que c'est une solution meilleure et plus courte. Formatez simplement le
UILabel
(textLabel
) de la cellule pour calculer automatiquement la hauteur en spécifiantsizeToFit
et tout devrait bien se passer.la source
Je ne pense pas que vous puissiez manipuler une base
UITableViewCell's
privéeUILabel
pour faire cela. Vous pouvez en ajouter vous-même une nouvelleUILabel
à la cellule et l'utilisernumberOfLines
avecsizeToFit
pour la dimensionner de manière appropriée. Quelque chose comme:la source