7
votes

HauteurFornorTindExpath pour les Nstrings plus longs

J'ai un utableview code> (regroupé!) Et besoin de calculer la hauteur de deux styles de cellules: utableviewCellstyleFault code> et uableviewcellstylevalue2 code>.

C'est comme ça que je le fais pour utableviewcellstylefault code>: strud> p> xxx pré>

et pour utableviewcellstylevalue2 Code>: strong> p>

CGSize  textSize = {207.f, 200000.0f};
CGSize  size = [myTextString2 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 30.0f;
result = MAX(size.height, 44.0f);


0 commentaires

6 Réponses :


2
votes

Lorsque vous créez votre cellule, utilisez-vous la même police que celle que vous utilisez pour mesurer?

J'ai utilisé le tutoriel sur cette page et tout a fonctionné pour moi. Cela pourrait vous être utile aussi:


2 commentaires

Oui, j'utilise la même taille et type de police (gras / pas audacieux). Je vais regarder le lien et voir si cela la résout et vous le ferai savoir.


J'ai découvert que je n'utilisais pas la police correcte! J'ai découvert que j'avais des problèmes avec les cellules Value2, parce que j'ai supposé qu'ils étaient fontacés 14, alors qu'ils sont en réalité 15. L'autre style de cellule dont je devais jouer avec la quantité de hauteur qu'il ajoute à la hauteur de texte.



9
votes

Voici le code que j'utilise pour cela. Cela fonctionne comme un charme pour un type de cellule. Il peut avoir des pièces utiles pour votre application.

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath {
AppAppDelegate *appDelegate = (AppAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *Text = ([[appDelegate.myTextSectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"Text"]);

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [Text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height + 15;}


1 commentaires

Merci. J'ai fini par faire quelque chose seul avec les mêmes lignes. J'ai découvert que j'avais des problèmes avec les cellules Value2, car je suppose qu'ils étaient fontisisisez 14, tandis qu'elles sont effectivement 15. Pour votre code, vous voudrez peut-être ajouter: Résultat = max (labelsize.height + 15, 44.0f) ; Juste au cas où la cellule est jamais vide ou moins, 2 lignes, cela le retournera avec une hauteur minimale de la ligne de 44.0F, qui est la normale. S'il n'y a qu'une seule ligne, cela le rendra plus petit que 44.0F.



2
votes

Il me semble que vous avez compris que vous utilisiez la mauvaise taille de texte. Vous voudrez peut-être simplement utiliser le polices et LinebreakMODE Propriétés de l'étiquette pour éviter ce problème à l'avenir, surtout si vous les changez dans la cellule ultérieure. De plus, pour l'amour de la lisibilité, je vais éviter d'ajouter à la hauteur avant de retourner un numéro. Au lieu de cela, j'essaierais quelque chose comme ceci: xxx

J'ai utilisé en 1979 car selon la documentation, il ne faut pas renvoyer des valeurs supérieures à 2009.


1 commentaires

Merci. Ouais, j'ai défini certaines constantes pour la taille de la police, donc si je le change pour la cellule, cela mettra à jour partout.



0
votes

Quand travaille-t-il pour moi consiste à calculer la contrainte basée sur la largeur de la vue Tableau: xxx


0 commentaires

0
votes

moyen le plus simple de le faire:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

CGFloat result = 10.0f;
if(indexPath.section == 1) // here i compare the sections
{
    result = 400.0f;
}
return result;
}


0 commentaires

2
votes

Si vous voulez calculer la hauteur correctement pour CellValue2, vous devez utiliser: [Uifont BoldsystemfontoFsize: 15.0f] et comme LinebreakMode: NsLebrebreakByStronCatiningTAIL

Si vous n'utilisez pas audacieux, le texte remplira correctement, mais vous perdrez le rembourrage vertical correct.

Le reste de votre calcul est correct.


0 commentaires