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:
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 couleurcontentView.backgroundColor
pour effacer la couleurbackgroundView
à zéromais 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.
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
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éebackgroundColor
. 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 letableView: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.
Modifiez la couleur d'arrière-plan ContentView à la place et cela fonctionnera.
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.);
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
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 ...!