Je viens de tester mon application avec iOS 6.0 et Xcode 4.5GM et j'ai configuré une vue comme celle-ci:
[self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]];
Ainsi, la vue a le même modèle qu'une vue de table commune.
Cela fonctionne très bien sur iOS 4 et 5, mais sous iOS 6, cela me donne simplement un fond blanc.
Est-ce obsolète? Si oui, comment puis-je le remplacer?
Merci
Cette méthode sera obsolète pendant le programme de base 6.0. Si vous voulez avoir dans votre propre vue un arrière-plan qui ressemble à l'arrière-plan de la vue tableau, vous devez créer une vue vide et la placer. derrière votre contenu.
Tout d’abord, ajoutez ceci à votre viewDidLoad :
self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];
OR
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];
Ajoutez ensuite ces images à votre application:
J'ai écrit une catégorie UIColor
pour remplacer groupTableViewBackgroundColor
:
@interface UIColor (UITableViewBackground)
+ (UIColor *)groupTableViewBackgroundColor;
@end
@implementation UIColor (UITableViewBackground)
+ (UIColor *)groupTableViewBackgroundColor
{
__strong static UIImage* tableViewBackgroundImage = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(7.f, 1.f), NO, 0.0);
CGContextRef c = UIGraphicsGetCurrentContext();
[[self colorWithRed:185/255.f green:192/255.f blue:202/255.f alpha:1.f] setFill];
CGContextFillRect(c, CGRectMake(0, 0, 4, 1));
[[self colorWithRed:185/255.f green:193/255.f blue:200/255.f alpha:1.f] setFill];
CGContextFillRect(c, CGRectMake(4, 0, 1, 1));
[[self colorWithRed:192/255.f green:200/255.f blue:207/255.f alpha:1.f] setFill];
CGContextFillRect(c, CGRectMake(5, 0, 2, 1));
tableViewBackgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
return [self colorWithPatternImage:tableViewBackgroundImage];
}
@end
Cette solution permet également de modifier l'apparence de l'arrière-plan. N'hésitez pas à changer le code de dessin :)
Dans iOS6 SKD, les commentaires dans UIInterface.h suggèrent ce qui suit:
Les arrière-plans de vue de tableau de style de groupe ne peuvent plus être représentés par Une couleur simple. Si vous voulez avoir un arrière-plan dans votre propre vue Qui ressemble à l'arrière-plan de la vue de tableau, vous devez créer Une vue de tableau vide et le placer derrière votre contenu.
Cette méthode sera obsolète pendant le programme de démarrage 6.0
Une solution simple consiste à définir l’arrière-plan avec des valeurs RVB équivalentes:
[self.view setBackgroundColor:[UIColor colorWithRed:215.0/255.0 green:217.0/255.0 blue:223.0/255.0 alpha:1.0]];
Vous pouvez les définir pour que l'arrière-plan de la vue soit coloré en blanc ou que vous préfériez utiliser xib pour supprimer l'avertissement.
Si cela peut aider quelqu'un, voici ce que je fais dans ma vue personnalisée pour obtenir ce contexte (en utilisant l'allusion de M. Beloeuvre)
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
UITableView *tv = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
[self.view addSubview:tv];
[self.view sendSubviewToBack:tv];
// ...
}
Essaye ça:
[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
Vous aurez peut-être du mal à localiser la vue si vous utilisez le storyboard et si vous avez plusieurs vues. Vous pouvez cliquer sur le bouton "Afficher l'éditeur de version" dans le coin supérieur droit. Cela changera la vue de l'histoire en vue de texte XML. Recherchez "groupTableViewBackGroundColor". Vous devriez trouver des vues avec cet attribut.
En développant la solution de @ NSElvis, voici l'actif d'arrière-plan de la vue tabulaire groupée identique (il est suffisamment large pour ne pas produire d'effets amusants en orientation paysage).
Pour l'utiliser, il suffit de faire
[YOUR_VIEW setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"back-tableview"]]];
C'est une bonne idée d'utiliser des méthodes standard pour les versions précédentes d'iOs. J'ai donc amélioré la solution de James Boutcher:
+ (void)setBackgroundColorForTableView:(UITableView*) tableView
{
UIColor* color = [UIColor whiteColor];
NSString* version = [[UIDevice currentDevice] systemVersion];
if([version floatValue] < 6.0)
{
tableView.backgroundColor = color;
}
else
{
tableView.backgroundView = nil;
UIView* bv = [[UIView alloc] init];
bv.backgroundColor = color;
tableView.backgroundView = bv;
[bv release];
}
}