web-dev-qa-db-fra.com

groupTableViewBackgroundColor est-il déconseillé sur iOS 6?

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

36
estemendoza

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.

31
dhcdht

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:

tableViewBackground.png

tableViewBackground.png

[email protected]

tableViewBackground@2x.png

25
3lvis

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 :)

18
Felix

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.

13
Antoine Beloeuvre

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];
    // ...
}
6
James Boutcher

Essaye ça:

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
2
Ravi Sharma

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.

enter image description here

1
David.Chu.ca

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).

[email protected]

Pour l'utiliser, il suffit de faire

[YOUR_VIEW setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"back-tableview"]]];
0
Ege Akpinar

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];
    }
}
0
Tymur Tkachenko