Les éléments UITableview deviennent gras après le défilement

Ok, peut-être que je suis trop difficile. Excuses d'avance si vous ne pouvez pas le voir, mais dans la deuxième image, l'élément sur la ligne est pixellated un peu, ou comme si un mot a été placé au-dessus d'un mot. Cela ne se produit qu'après avoir défilé sur la tableview, sinon, il est similaire à la première image.

Première photo:

http://oi61.tinypic.com/308grjc.jpg

Deuxième photo (vous pouvez voir la différence dans la police ici): http://oi61.tinypic.com/2mqpbb9.jpg

c'est un peu plus gras et non raffiné une fois que je défile.

Je n'ai franchement aucune idée de pourquoi. La vue de table est chargée normalement. Toute aide, intuition ou suggestion serait fortement associée, même si elle peut me pointer vers la bonne zone.

Voici le code pour la tableview de la deuxième image.

static NSSsortingng *CellIdentifier = @"OrderProductCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; } //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; //configure cell, display name and cost of each item OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; UILabel *lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; lableName.backgroundColor=[UIColor clearColor]; lableName.font=[UIFont boldSystemFontOfSize:19]; [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; lableName.text=p.name; //UILabel *counterNumber=[[UILabel alloc]initWithFrame:CGRectMake(10, 25, 300, 20)]; //counterNumber.backgroundColor=[UIColor clearColor]; //counterNumber.font=[UIFont systemFontOfSize:12]; //counterNumber.text=[NSSsortingng ssortingngWithFormat:@"Scan time :%@",p.scannerCounter]; [cell.detailTextLabel setText:[NSSsortingng ssortingngWithFormat:@"%@ %.02f",p.currency, p.cost]]; cell.imageView.image = [UIImage imageNamed:p.image]; [cell addSubview:lableName]; //[cell release]; //[cell addSubview:counterNumber]; return cell; 

Cela arrive parce que vous ne réutilisez pas de cellules et que vous ajoutez donc l'label encore et encore au lieu d'utiliser celle déjà existante.

Placez simplement le code suivant dans le if (cell == nil):

 static NSSsortingng *CellIdentifier = @"OrderProductCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; UILabel *lableName; if(cell==nil){ // this is where we should initialize and customize the UI elements, // or in this case your label. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; lableName.backgroundColor=[UIColor clearColor]; lableName.font=[UIFont boldSystemFontOfSize:19]; [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; [cell addSubview:lableName]; } // this is where we should assign the value. OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; lableName.text = p.name; /* assign other values if any ... */ return cell; 

De cette façon, lableName ne sera pas ajouté à la cellule encore et encore et, par conséquent, ce problème ne se produira pas.

La meilleure façon de réutiliser les propriétés d'une cellule est d'initialiser et de personnaliser tout ce qui se trouve dans le if (cell == nil) et d'append uniquement la valeur de l'élément en dehors de la condition if.

  1. N'ajoutez pas directement les sous-vues à la cellule, ajoutez-la à contentView de la cellule
  2. Lors de la réutilisation de la cellule, vous devez d'abord supprimer l'label existante et append une nouvelle label ou utiliser la cellule existante au lieu d'en append une nouvelle.

Changez votre code comme:

 static NSSsortingng *CellIdentifier = @"OrderProductCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; UILabel *lableName = nil; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; lableName.backgroundColor=[UIColor clearColor]; lableName.font=[UIFont boldSystemFontOfSize:19]; [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; lableName.tag = 7; [cell.contentView addSubview:lableName]; } //configure cell, display name and cost of each item OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; lableName = (UILabel *)[cell.contentView viewWithTag:7]; lableName.text=p.name; [cell.detailTextLabel setText:[NSSsortingng ssortingngWithFormat:@"%@ %.02f",p.currency, p.cost]]; cell.imageView.image = [UIImage imageNamed:p.image]; return cell; 

Les deux lignes 1 et 2 font les mêmes fonts de parameters

  lableName.font=[UIFont boldSystemFontOfSize:19]; // line 1 [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; // line 2 [cell.contentView addSubview:lableName]; UILabel *lableName = nil; //Inside your cellForRowAtIndexPath put this code static NSSsortingng *CellIdentifier = @"OrderProductCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; } //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; //configure cell, display name and cost of each item OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; lableName.backgroundColor=[UIColor clearColor]; [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; // set fonts only once [cell.contentView addSubview:lableName]; }