web-dev-qa-db-fra.com

Impossible de modifier la couleur d'arrière-plan de la cellule de vue de tableau statique sur iOS 7 (iPad)

Je ne parviens pas à modifier la couleur d'arrière-plan des UITableViewCells statiques sur iOS 7, lors de l'exécution sur un appareil iPad. Vous pouvez facilement vérifier cela avec la configuration suivante:

  • Créez un nouveau projet universel dans Xcode 5 avec deux storyboards.
  • Dans chaque storyboard, placez un seul contrôleur - contrôleur de vue de table et définissez-le comme celui initial.
  • Mettez quelques (par exemple 3) cellules statiques dans la vue tableau dans les deux contrôleurs/storyboards.
  • Définissez la couleur d'arrière-plan de chaque cellule statique sur différentes couleurs dans Interface Builder (j'utilise des couleurs rouges, vertes et claires).

Maintenant, exécutez l'application sur des simulateurs iPhone et iPad (iOS 7).

Sur le simulateur iPhone, tout va bien;
sur le simulateur iPad, toutes les cellules sont de couleur blanche.

J'ai essayé de forcer l'iPad à fonctionner correctement en définissant les propriétés d'exécution dans Interface Builder pour les cellules:

  • backgroundColor pour effacer la couleur
  • contentView.backgroundColor pour effacer la couleur
  • backgroundView à zéro

mais rien n'y fait. En fait, la définition de la propriété d'exécution de contentView.backgroundColor changera la couleur de la cellule, mais cela ne fonctionne pas avec une couleur claire (ce qui signifie qu'il y a une autre vue colorée en blanc derrière).

Il est très étrange que deux appareils sur la même version d'iOS produisent des résultats différents. Quelqu'un d'autre peut-il confirmer ce bug?

Quelqu'un a-t-il une solution à ce problème, ou la seule façon est d'aller pour les propriétés dynamiques + définir la couleur dans cellForRowAtIndexPath? Je voudrais utiliser des cellules statiques, car la nature du problème est statique.

p.s. Je viens de réaliser que j'ai oublié d'essayer de définir le backgroundView.backgroundColor propriété d'exécution pour effacer la couleur, et je n'ai pas accès à un Mac pour le moment. Peut-être que ça ferait l'affaire.

37
Kovasandra

Faites ceci:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
     UIImage *pattern = [UIImage imageNamed:@"image.png"];
     [cell setBackgroundColor:[UIColor colorWithPatternImage:pattern]];  
}

Travaille pour moi sur IOS7

57
fabrizotus

Selon doc d'Apple :

Que vous utilisiez une cellule prédéfinie ou personnalisée, vous pouvez modifier l'arrière-plan de la cellule à l'aide de la propriété backgroundView ou en modifiant la propriété héritée backgroundColor. Dans iOS 7, les cellules ont un fond blanc par défaut; dans les versions antérieures d'iOS, les cellules héritent de la couleur d'arrière-plan de la vue de table englobante. Si vous souhaitez modifier la couleur d'arrière-plan d'une cellule, faites-le dans le tableView:willDisplayCell:forRowAtIndexPath: méthode de votre délégué de vue de table.

Quelle que soit la couleur que vous définissez dans tableView:cellForRowAtIndexPath:, iOS 7 le change en blanc plus tard. Réglez-le simplement sur tableView:willDisplayCell:forRowAtIndexPath:. A parfaitement fonctionné pour moi.

10
Chex

Modifiez la couleur d'arrière-plan ContentView à la place et cela fonctionnera.

1
HeavenlyManBR

Il existe un moyen beaucoup plus simple de remplacer la couleur d'arrière-plan des cellules. Sous-classe UITableViewCell et définissez-la comme classe pour la cellule statique de table. Remplacez ensuite:

-(void) willMoveToSuperview:(UIView *)newSuperview  {
    self.backgroundColor = [UIColor ...];
}

où [UIColor ...] = quelle couleur vous voulez (par exemple [UIColor clearColor] etc.);

1
middleseatman

La seule façon de résoudre ce problème était de créer le tableau par programme au lieu d'utiliser le storyboard. Pour référence je posterai ma solution, j'espère qu'elle pourra aider n'importe qui.

J'ai remplacé le uitableviewcontroller pour un uiviewcontroller.

puis ajouté ceci:

le fichier d'en-tête

#import <UIKit/UIKit.h>

@interface LtHomeViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
NSArray *mFiles;
NSArray *mPics;
}

@end

Et le fichier module

#import "LtHomeViewController.h"
#import "LtHomeToolbar.h"
#import "LtHomeCustomCell.h"

@interface LtHomeViewController () <LtHomeToolbarDelegate>

@end

@implementation LtHomeViewController
{
LtHomeToolbar *mainToolbar;
UITableView *theListView;
}

#define TOOLBAR_HEIGHT 64.0f

-(UIStatusBarStyle)preferredStatusBarStyle{
 return UIStatusBarStyleLightContent;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

CGRect toolbarRect = self.view.bounds; // View controller's view bounds
toolbarRect.size.height = TOOLBAR_HEIGHT;

mainToolbar = [[LtHomeToolbar alloc] initWithFrame:toolbarRect]; // At top
mainToolbar.delegate = self;

[self.view addSubview:mainToolbar];

//
mFiles = [[NSArray alloc] initWithObjects:@"../Lumina.app/lumina0.pdf", @"../Lumina.app/lumina8.pdf", @"../Lumina.app/lumina9.pdf", @"../Lumina.app/lumina10.pdf", nil];
mPics = [[NSArray alloc] initWithObjects:@"vol0.jpg", @"vol8.jpg", @"vol9.jpg", @"vol10.jpg", nil];
//
CGRect tableViewFrame = self.view.bounds;
tableViewFrame.Origin.y = TOOLBAR_HEIGHT;
tableViewFrame.size.height = self.view.bounds.size.height - TOOLBAR_HEIGHT;

theListView = [[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain];
theListView.delegate = self;
theListView.dataSource = self;

theListView.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0];


[self.view addSubview:theListView];
}

#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
{
   return 1;
}

- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
   return [mFiles count];
}

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *cellIdentifier = @"HomeCell";

   // Similar to UITableViewCell, but
   LtHomeCustomCell *cell = (LtHomeCustomCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
  if (cell == nil) {
    cell = [[LtHomeCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
  }

cell.image.image = [UIImage imageNamed:[mPics objectAtIndex:indexPath.row]];

NSString *magName = [[mFiles objectAtIndex:indexPath.row]stringByReplacingOccurrencesOfString:@"../Lumina.app/" withString:@""];
magName = [magName stringByReplacingOccurrencesOfString:@"lumina" withString:@""];
magName = [magName stringByReplacingOccurrencesOfString:@".pdf" withString:@""];
magName = [[@"Triathlon LUMINA " stringByAppendingString:magName]stringByAppendingString:@"号"];

cell.descriptionLabel.text = magName;

return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 110;
}

#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}


@end

Maintenant, je ne sais pas si seule cette ligne vous aidera, mais comme j'ai besoin de plus de choses, j'ai pris l'approche de faire la table manuellement

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    cell.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0];
}

David

1
David

il suffit d'écrire cette ligne

[cell setBackgroundColor: [UIColor clearColor]];

dans votre fonction avant l'instruction return

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

Parce que dans la documentation iOS7, il est clairement indiqué que la couleur par défaut de chaque cellule du tableau est le blanc. Donc, si vous voulez le changer, vous devez le changer à partir de votre code. N'oubliez pas de définir la propriété background pour effacer la couleur de votre table dans l'inspecteur Utilitaires> Attributs (sur votre droite).

j'espère que cela aide ... car cela a fonctionné pour moi ...!

0
eagle