2009-08-21 3 views
1

J'utilise UITableViewCellStyleValue2 et .NSString est tronqué prématurément dans un UITableViewCell dans 3.0, mais semble bien dans 3.1

Commençons par un code (ce n'est pas 100% complet, mais j'ai essayé d'inclure le code nécessaire pour nous l'espérons déchiffre ce que je fais, et peut-être faire mal):

#define CELL_FONTSIZE 15.0f 
CGSize textSizeValue2 = {207.0f, 9999.0f}; 

if ([value isEqual: CELL_4]) { 
    CGSize size = [cell4String sizeWithFont:[UIFont boldSystemFontOfSize:CELL_FONTSIZE] constrainedToSize:textSizeValue2 lineBreakMode:UILineBreakModeWordWrap]; 
    size.height += CELL_HEIGHT;   // top and bottom margin 
    result = MAX(size.height, 44.0f); // at least one row 

Pour cette cellule , le résultat de la hauteur sort à 214 fois pour 3.0 et 3.1

Voici le code de la cellule:

static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap; 
    cell.textLabel.numberOfLines = 0; 
    cell.detailTextLabel.numberOfLines = 0; 
    cell.clearsContextBeforeDrawing; 

if ([value isEqual: CELL_4]) { 
     cell.textLabel.text = @"About"; 
     cell.detailTextLabel.text = cell4String; 

donc, fondamentalement, pour 3.0 et 3.1 la même chose est en cours, mais lors de l'exécution de l'application dans le simulateur 3.0, la dernière ligne semble être coupée si le cell.detailTextLabel.numberOfLines a plus de trois lignes de texte. La chose étrange est que le texte est juste coupé, mais la cellule est dessinée à la bonne hauteur dans 3.0, il y a juste un grand espace vide sous la cellule.

Quelqu'un sait pourquoi c'est différent entre 3.0 et 3.1? Je sais que j'utilise une version bêta de Xcode, mais c'est assez étrange que cela fonctionne dans la version bêta et pas dans la version 3.0 parce que, d'après ce que je peux voir, je ne fais rien de fou, mais quelque chose de basique.

Merci

Répondre

1

Eh bien, je n'ai pas de réponse ou d'une solution. Mais je voulais juste faire remarquer que je suis confronté aux mêmes problèmes. Je pensais te faire savoir que tu n'es pas le seul, ça vaut probablement quelque chose. J'utilise Xcode 3.1.3 avec le SDK iPhone 3.0 installé (pas une version bêta). L'espace vide apparaît à la fois dans le simulateur et sur l'appareil, tous les deux exécutant le micrologiciel 3.0. Je n'ai pas essayé une version plus récente.

+0

Merci pour les commentaires. C'est d'entendre que je ne suis pas le seul, bien que l'erreur semble étrange et définitivement réparable. Ces cellules sont importantes dans mon application et maintenant que le 3.1 est sorti, ce n'est pas un problème. Je demande 3.0 de toute façon donc req. 3.1 devrait être un gros problème, j'espère. Mais faites-moi savoir si vous découvrez comment le réparer. – runmad

1

Vous devez déterminer la taille de la zone de texte affichée avec le texte. Pour ce faire, utilisez une fonction similaire à ci-dessous, puis définissez cette valeur pour la hauteur de ligne de la tableviewcell en question. Ajustez votre taille de police en conséquence. J'ai ajouté un tampon de 20 pour lui donner un peu d'espace pour respirer

 UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:14.0]; 
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT); 
    CGSize labelSize = [[detailValues objectAtIndex:indexPath.section] sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 

    labelHeight = labelSize.height + 20; 
+0

Comme vous pouvez le voir dans mon code, ce n'est pas le problème. – runmad

0

je suis tombé sur ce poste quand j'avais un problème similaire sur iOS5 donc je vais laisser quelques lignes sur la façon dont je le mien résolu au cas où quelqu'un D'autre est coincé. Sur mes cellules, j'avais augmenté la taille de la police du texte et il était alors en train de couper le texte, même s'il restait assez d'espace pour qu'il puisse s'adapter. J'ai eu

adjustsFontSizeToFitWidth:NO 

il était si tronquant le texte avec une ...

La façon dont je l'ai fixé était tout simplement fait la largeur et la hauteur totale du cadre de la cellule plus grande et qui a fait l'affaire.

CGRect frame = CGRectMake(0, 0, SCREEN_WIDTH, height); 
UIView *view = [[UIView alloc] initWithFrame:frame]; 
cell.frame = frame; 

Espérons que cela aide quelqu'un à l'avenir

bonne chance

Questions connexes