J'ai une cellule prototype à l'intérieur de mon i Créez la cellule prototype dans alors mon La première fois que la cellule est affichée, < Code> LayouplieViews code> est appelé, mais le Pourquoi ne fonctionne pas la première fois que la cellule est affichée - et que dois-je avoir besoin? faire pour le réparer. P> Merci d'avance! P> P> utableview code> qui contient un
uilabel code>. Je veux modifier de manière dynamique la taille de l'étiquette (et la cellule) en fonction de la taille du texte dans l'étiquette.
CellfrowrotindexPath code> comme ceci: P>
programdétailcell code> a l'implémentation suivante: p>
DescriptionLabel code> n'est pas redimensionné. Cependant, si je fais défiler la table et sauvegardez à nouveau, la cellule "réutilisée" apparaît avec l'étiquette correctement redimensionnée! P>
9 Réponses :
parce que lorsque Je vous suggère d'appeler LayouTouSubviews code> est appelé votre
la descriptionLabel code> s texte n'est pas encore défini. Et lorsque vous faites défiler, le texte est défini. Donc, c'est correct maintenant.
sizetofit code> après avoir défini le texte. P>
static NSString *CellIdentifier = @"ProgramDetailCell";
ProgramDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.descriptionLabel.text = self.program.subtitle;
[cell.descriptionLabel sizeToFit];
return cell;
appelez ceci dans hauteurfrofortordexpath code> et calculer manuellement la hauteur
Merci, mais cela ne change que la taille de la cellule et non la taille de l'étiquette la première fois qu'elle est affichée.
oui faites la même chose dans cellsforfortindexpath et retourner la cellule plutôt que la hauteur
Cela ne fonctionne pas non plus. La première fois que l'étiquette apparaît, il conserve la taille d'origine du constructeur d'interface.
Vous pouvez utiliser ci-dessous code:
//Calculate the expected size based on the font and linebreak mode of your label // FLT_MAX here simply means no constraint in height CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX); CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; //adjust the label the the new height. CGRect newFrame = yourLabel.frame; newFrame.size.height = expectedLabelSize.height; yourLabel.frame = newFrame;
Où devrais-je mettre ce code? CellfroworTindExpath? LayouSubviews à l'intérieur de l'Uitabiliewcell?
cellsfortoratindexpath
Merci, mais cela n'a pas fonctionné. La taille du cadre est la même que dans l'IB lorsqu'elle apparaît pour la première fois et ne modifie que la nouvelle taille une fois que la cellule est réduise après le défilement.
Je pense avant de définir le texte sur l'étiquette que vous avez écrit le code de taille, vous devez définir enfin le texte dans l'étiquette.
Après avoir récupéré toutes les données du serveur, vous pouvez obtenir une hauteur de ce et ici j'ai donné une description de puis Mise à jour de votre étiquette en fonction de votre étiquette. Cela fonctionne bien pour moi. Je l'utilise. P> p> uilabel code> à l'aide de cette méthode.
MeaseDeightext: code>. Cette logique fonctionne dans tous les
iOS5 code>,
iOS6 code>,
iOS7 code>. P>
Changer le cadre de l'étiquette en dehors des appels de délégués Uitables ne fait aucune différence. Utilisez-vous aussi de l'autolayouillage?
Si votre exigence change de manière dynamique la taille de la hauteur de l'étiquette, suivez le lien ci-dessous. Lorsque nous devons changer la hauteur de l'étiquette, nous devons également modifier la hauteur de la ligne: P>
redimensionner Uilabel ne fonctionne pas tout à fait fonctionner P>
J'ai essayé cela et ça n'a pas aidé. Utilisez-vous aussi de l'autolayouillage?
Non, je n'ai pas utilisé autolayout. J'ai fait du code pour une application complète, aucun xib and Storyboard n'est utilisé.
Utilisez ci-dessous Code pour une hauteur dynamique définie dans la cellule
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *messagetext=[NSString stringWithFormat:@"%@",[[arryStoryView objectAtIndex:indexPath.row] valueForKey:@"messagetext"]]; CGSize StoryTextSize= [messagetext sizeWithFont:[UIFont fontWithName:@"Georgia" size:17.0f] constrainedToSize:CGSizeMake(300, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; int TotalHeight; TotalHeight= StoryTextSize.height + 10; return TotalHeight; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell1"; UITableViewCell *cell=[tblSendMsg dequeueReusableCellWithIdentifier:CellIdentifier]; cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.selectionStyle = UITableViewCellSelectionStyleNone; NSString *storytext=[NSString stringWithFormat:@"%@",[[arryStoryView objectAtIndex:indexPath.row] valueForKey:@"storytext"]]; CGSize StoryTextSize = [storytext sizeWithFont:[UIFont fontWithName:@"Georgia" size:17.0f] constrainedToSize:CGSizeMake(300, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; lblStoryText.frame=CGRectMake(5, 25, [[UIScreen mainScreen] bounds].size.width-10, StoryTextSize.height+30); int nooflines=StoryTextSize.height/16; int i= StoryTextSize.height; if(i%16 !=0) { nooflines=nooflines+1; } lblStoryText.numberOfLines=nooflines; lblStoryText.font=[UIFont fontWithName:@"Georgia" size:17.0f]; lblStoryText.text=[NSString stringWithFormat:@"%@",storytext]; return cell; }
Cela ne fonctionne pas pour moi. Utilisez-vous AUTOLAYOUT?
in xib, accédez à la première onglet, sous Document de constructeur d'interface, décochez la case Utiliser une boîte de mise en page automatique. P>
Cela a résolu le problème, mais maintenant je ne peux pas utiliser autolayout. Quel est le rarement?
Ok vous avez raison. Mais je dois utiliser la mise en page automatique sur l'utableviewcell personnalisé, comment utiliser?
Si vous souhaitez utiliser la mise en page automatique, ce qui compte ici sont les contraintes. Ensuite, vous ne devriez pas changer le cadre. Veuillez lire ce développeur.apple.com/library/ios / Documentation / Userexperience / ...
Cela ne fonctionne pas car vous utilisez Voici la solution. P> Étape 1: strong> p> avoir le étape 2: strong> p> dans votre UIVIEWCONTROLLER IN Vous pouvez le calculer à l'aide de: p> mise en page automatique code>. Vous avez besoin de
mise en page automatique code> moyen d'y parvenir.
uilabel code> épinglé en haut et en bas du
uitatifviewcell code>. Vous pouvez y parvenir via le constructeur d'interface code> en ayant
contrainte verticale code> sur
uilabel code> à partir de
haut code> et
bas de la cellule. Cela rendra le
Uilabel Code> augmentation de la hauteur si la hauteur de la cellule augmente ou vice versa. P>
- (CGFLOAT) TableView: (UitaireView *) TableView HautPhétrofortdexpath: (NsindexPath *) IndustryPath code> Calculez la taille du
Uitabilviewcell code>. p>
CGRect textFrame = [YourText boundingRectWithSize:CGSizeMake(width of the label, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:Your Font} context:nil];
La première solution a définitivement fonctionné pour moi. Merci!
Si vous utilisez Autolayout, la modification de la trame n'aura aucun effet. P>
Au lieu de cela, vous devez modifier les contraintes. P>
Avez-vous trouvé une solution à ce problème?
Trouvé une solution pour ce problème?