J'ai un uableview code> et je souhaite définir la hauteur de la ligne pour trois des cellules de manière dynamique. Donc, dans ViewDidLoad () Code> J'ai implémenté le code suivant: override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 && indexPath.row == 0 {
return CGFloat(85)
} else if indexPath.section == 0 && indexPath.row == 1 {
return CGFloat(145)
}
return UITableView.automaticDimension
}
3 Réponses :
La cellule de la section 3 Ce que j'ai besoin de vous à faire est de sélectionner le Vous avez également dit que ce Si cela ne fonctionne pas, j'ai une autre solution plus impliquée qui devrait fonctionner pour vous. P> uilabel code> ne s'ajustera pas automatiquement pour répondre au texte dedans. P>
uilabel code> en question, puis dans l'inspecteur des attributs, définissez le numéro numéro de lignes code> sur 0 code> 0 code> .
p>
Uilabel code> est dynamique, ce qui signifie que vous définissez le texte quelque part dans votre code. Immédiatement après avoir défini ce texte uilabel code> s, vous souhaitez appeler myLabel.sizefit () code>. Cela devrait régler la hauteur de l'étiquette pour accueillir le texte dans. P>
Merci pour votre réponse! Malheureusement, ça ne marche pas pour moi ...
parce que La cellule de la section 3 sizetofit () code> n'a pas fonctionné pour vous, nous allons essayer quelque chose d'un peu plus impliqué. Uilabel code> s ne réglez pas automatiquement leur hauteur pour accueillir le texte à l'intérieur. Voici ce que vous devez faire: P> Uilabel code> dans la cellule de la section 3. Connectez cette contrainte de hauteur à la classe de votre contrôleur d'affichage via un @iboutlet code>: p> uilabel code> en question, mais je sais que vous le faites quelque part comme vous l'avez décrit comme étant "dynamique". Chaque fois que vous définissez le texte du Uilabel code> en question, vous devez également modifier la constante de la contrainte de hauteur que nous avons faite pour pouvoir accueillir ce texte. Nous devons donc être capables de calculer la hauteur du Uilabel code> en fonction de sa largeur et de sa police. Nous pouvons ajouter une extension code> à chaîne code> afin de le faire: p> cellLabel.text = "DummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyData"
//This will be called immediately after you set the text for the UILabel in question
cellLabelHeight.constant = cellLabel.text.height(withConstrainedWidth: cellLabel.frame.width, font: cellLabel.font)
Merci beaucoup pour vos efforts! Votre dernière suggestion semble fonctionner mieux, mais malheureusement, l'espace entre l'étiquette et le bord de la cellule est beaucoup trop petit. Mais je vais utiliser une vue texte au lieu d'une étiquette à la place ...
Vous devrez utiliser une stratégie similaire pour un uitextview code>. C'est-à-dire que lui donner une contrainte de hauteur, obtenir sa hauteur via uitextview.ContSeize.height code>, puis mettant à jour la constante de la contrainte. Donc, label vs textview ne devrait pas être trop important ici. Avez-vous une photo de la façon dont l'étiquette ressemble lors de l'utilisation de ma méthode?
Bien sûr, comment puis-je le poster sans réponse?
Avez-vous essayé de définir le (code> Numberflines code> comme je l'ai suggéré ci-dessus?
Il a fait. Ma réponse originale lui a demandé de définir Numberflines code> à 0 code> et appelez sizetofit () code> sur son uilabel code> @koen
Je déjoue la réponse pour que vous puissiez le voir
J'ai édité la ma question. Maintenant, il semble que la hauteur de la cellule ne changeait pas ...
Je ne pense pas sizetofit () code> est-il plus nécessaire, mais je pourrais avoir tort.
@finebel est Clipstobounds Code> défini sur true code> pour le Uilabel code>? Nous pourrions probablement obtenir ce travail s'il ne s'agit que d'un problème de contrainte.
@finebel: Qu'avez-vous changé exactement? ("Comment il s'occupe de la mise en œuvre de la suggestion ci-dessus" n'est pas très clair)
Le problème doit être que le texte Uilabel code> est mis à jour après la définition de la hauteur sur utableview.automaticdimension code>. Pouvez-vous définir des points d'arrêt tous les deux à la fois où vous définissez la constante de contrainte uilabel code> S et la limite retour utableview.automaticdimension code>? Vous devez vous assurer que la contrainte de hauteur de l'étiquette ( celllabelheight code>) modifie avant b> Vous appelez retour uitaire.automaticdimension code>.
Vous pourriez peut-être appeler utableview.reloaddata code> après avoir appelé CellLabelheight.ConStant = CellLabel.text.Height (withConstraïdwidth: CellLabel.frame.Width, police: CellLabel.font) CODE>? Mais idéalement, vous mettriez à jour l'étiquette avant b> Vous appelez retour uitaireview.automaticdimension code>
Voici le projet exemple: Dropbox.com/s/le32yhlduuq7ckg/sampleProjectfe. ZIP? DL = 0 Ce serait mieux, s'il y a une solution sans le haut-kearconstraint, car je l'ai à trois cellules ...
Je vérifierai. Entre-temps, pouvez-vous définir des points d'arrêt comme indiqué dans les commentaires ci-dessus pour vous assurer que la contrainte de texte et de hauteur de l'étiquette est définie avant b> retour uitatifview.automaticdimension code> est appelé? Je suis convaincu que c'est la question. Appelant utableview.reloaddata () code> Après avoir défini la hauteur de la contrainte pourrait également le réparer, bien que ce soit un type de hacky.
En fait, j'ai compris, qui retourne utableview.Automaticdimension est appelée après la définition du texte de l'étiquette. Ce serait génial, si vous pouviez simplement la mettre en œuvre de la bonne manière dans l'échantillonProject! Je suis confus maintenant :-( ...
Ouais c'est ce que j'essayais de dire. Regardez les commentaires ci-dessus. Si vous appelez utableview.reloaddata () code> sur la ligne après CellLabelheight.ConStant = CellLabel.text.Height (withconstraïdwidth: CellLabel.frame.Width, police: CellLabel.font) CODE> , tu devrais être bon.
Génial :) heureux d'avoir pu aider
Veuillez regarder ci-dessous; p>
Pouvez-vous montrer votre code pour
Cellforat CODE>?Je n'ai pas implémenté Cellfinorat, car la vision de la table statique est une vue détaillée et je définit l'étiquette de chaque cellule comme ceci: Labelcell1.text = DélégateObj? .Attr1, labelcell2.text = DélégateObj? .Attr2, etc.
J'ai supprimé ma réponse précédente, laissez-moi savoir si ce nouveau travaille pour vous.
Vous devez définir
labelcell.numberoflines = 0 code> (supposerlabelcell code> est unuilabel code>). SiLabelcell code> est unutableviewcell code>, puis définissezlabelcell.textlabel.numberoflines = 0 code>.