1

J'essaie de configurer un UITableViewCell qui peut avoir une image dans le coin supérieur droit.Pourquoi cette UIImage disparaît-elle de UITableViewCell lors de la rotation en mode paysage?

Je l'ai en mode portrait, mais quand je tourne en mode paysage, l'image disparaît.

Voici le code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

     UIImage *cornerImage = [UIImage imageNamed:@"star_corner.png"]; 
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(cell.contentView.bounds.size.width - cornerImage.size.width, 
                       0, 
                       cornerImage.size.width, 
                       cornerImage.size.height)]; 
     imageView.tag = kCornerImageViewTag; 
     [cell.contentView addSubview:imageView]; 
     [imageView release]; 
    } 

    UIImageView *theView = (UIImageView *)[cell.contentView viewWithTag:kCornerImageViewTag]; 
    [theView setImage: [UIImage imageNamed:@"star_corner.png"]]; 

    cell.textLabel.text = @"the text label"; 
    return cell; 
} 

Fait intéressant, si je commente la ligne « cell.textLabel.text = », l'image ne montre dans le paysage ... bien qu'il ne se déplace pas vers la extrème droite.

S'il y a autre chose que je fais mal ici, s'il vous plaît faites le moi savoir.

Merci d'avance pour toute assistance.

Répondre

2

Je l'ai compris. La solution consistait à créer deux UIImageView: un pour l'image en étoile et un pour l'image de fond de la cellule.

J'ai ajouté le coin étoile UIImageView en tant que sous-vue à l'image de fond UIImageView, puis affecté à cell.backgroundView.

Les positions UIImageView étoiles se correctement par l'utilisation de:

starImageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; 

Et puisque l'ensemble est affecté à la cell.backgroundView (au lieu de cell.contentView), il n'est pas affectée par la suppression de la cellule bouton ou commandes de réorganisation.

0

Votre UIViewController doit répondre à didRotateFromInterfaceOrientation.

Dans cette méthode, vous pouvez parcourir des cellules, obtenir UIImageView avec [cellule viewWithTag] et modifier la propriété frame en fonction des nouvelles dimensions de cellule (cell.contentView.bounds).

Bonne chance!

+0

Merci pour la réponse. Je réponds en fait à didRotateFromInterfaceOrientation. Depuis la publication de cette question il y a quelques mois, j'ai trouvé que la solution facile était juste d'ajouter: imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; Cela positionne correctement l'image en mode paysage. Cependant, cela ne fonctionnera toujours pas pour moi car l'activation du bouton Supprimer de la cellule provoque le déplacement de l'image. De plus amples recherches, il me semble que j'ai besoin de sous-classer UITableViewCell et de faire ma mise en page là - donc j'explore comment faire cela maintenant. –