50 votes

iPhone - Définir l'arrière-plan sur UITableViewController

Existe-t-il un moyen de définir une vue d'arrière-plan sur un UITableViewController ?

J'essaie avec le code que j'utilise sur un UIViewController mais la vue vient sur tout le contenu de la vue de la table. Si j'ajoute la vue d'arrière-plan dans l'élément cellForRowAtIndexPath-method Il ne s'affiche pas du tout. Est-ce que quelqu'un a déjà fait cela auparavant ou a-t-il une idée de la façon dont cela peut être fait ? Voici le code que j'utilise :

UIImage *image = [UIImage imageNamed: @"background.jpg"];
UIImageView *backImage = [[UIImageView alloc] initWithImage: image];
[self.view addSubview: backImage];
[self.view sendSubviewToBack: backImage];

72voto

Frade Points 1689

Je sais que cela fait longtemps, mais pour mémoire Je pense avoir trouvé une meilleure solution en utilisant UITableView.backgroundView :

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lisbon.png"]];

self.tableView.backgroundView = imageView;
[imageView release];

J'ai essayé avec une taille d'image de 320x480 sur iPhone, et cela fonctionne parfaitement (j'ai aussi essayé avec .jpg).

1 votes

C'est mieux, cela va aussi derrière l'en-tête.

0 votes

A utilisé cette solution plutôt que celle qui consiste à utiliser un motif de couleur.

0 votes

@MárioCarvalho content que ça ait marché ! ;)

68voto

Nick Forge Points 13758

(Il s'agit essentiellement de la même solution que celle de Hans Espen ci-dessus, mais elle utilise des méthodes de commodité par souci de concision).

Mettez ceci dans votre - [UITableViewControllerSubclass viewDidLoad] méthode :

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern.png"]];

Il est inutile d'éviter quelques libérations automatiques dans une méthode viewDidLoad, puisqu'elle n'est appelée que rarement (lorsque la vue se charge réellement) et qu'elle aura donc un impact négligeable sur les performances.

N.B. Vous devez toujours utiliser des images PNG sur l'iPhone, et non des images JPEG ou d'un autre format.

13 votes

Je dois préciser que vous devez utiliser le format PNG pour tout ce qui n'est pas photographique. Les PNG sont accélérés matériellement par les GPU des appareils iOS, donc toutes vos images d'interface utilisateur devraient être au format PNG. Le format PNG supporte la transparence alpha, ce qui est une nécessité pour beaucoup de graphiques d'interface utilisateur. Pour tout ce qui est photographique, la compression JPEG permet de réduire la taille des fichiers, ce qui peut être un avantage.

2 votes

Cela définit l'arrière-plan de chaque groupe lorsque le tableau est défini dans un style groupé, mais y a-t-il un moyen de résoudre ce problème ?

1 votes

À partir d'iOS 3.2, il y a une UITableView.backgroundView ce qui, selon l'AFAIK, rend la solution de contournement couleur/motif redondante (si vous pouvez abandonner le support des versions antérieures à la version 3.2).

6voto

Hans Espen Points 482

En fait, j'ai réussi à le faire fonctionner ! :)

NSString *backgroundPath = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"jpg"];
UIImage *backgroundImage = [UIImage imageWithContentsOfFile:backgroundPath];
UIColor *backgroundColor = [[UIColor alloc] initWithPatternImage:backgroundImage];
self.tableView.backgroundColor = backgroundColor; 
[backgroundColor release];

5voto

Zaid Khan Points 15

Para Swift utiliser ceci,

self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png"))

0voto

Sandy Points 412
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X