2012-09-17 4 views
36

je testais juste mon application avec iOS 6.0 et Xcode 4.5GM et je l'ai mis en place une vue comme celui-ci:est groupTableViewBackgroundColor déconseillé sur iOS 6?

[self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]]; 

Ainsi, la vue a le même schéma que la vue de la table commune.

Cela fonctionne très bien sur iOS 4 et 5, mais dans iOS 6, il me donne juste un fond blanc.

Est-ce obsolète? Si oui, comment puis-je le remplacer?

Merci

Répondre

31

Cette méthode sera dépréciée au cours du 6.0 programme de semences Si vous voulez avoir un arrière-plan dans votre propre point de vue qui ressemble à l'arrière-plan vue de table, vous devez créer une vue de table vide et lieu derrière votre contenu.

+0

Grand, Merci !! – estemendoza

+0

Bonne idée, la vue de la table vide! – Clafou

+10

Bit d'une suggestion laide haha, vous devriez obtenir un concepteur pour faire une image de fond serait une meilleure solution. Upvote de toute façon à cause de l'indice déprécié. – Daniel

13

En iOS6 SKD, des commentaires dans UIInterface.h suggère ce qui suit:

milieux Groupe vue de table de style ne peuvent plus être représentés par une couleur simple. Si vous souhaitez avoir un arrière-plan dans votre propre vue qui ressemble à l'arrière-plan de la vue de table, vous devez créer une vue de table vide et la placer derrière votre contenu.

Cette méthode sera dépréciée au cours du 6.0 programme semencier

Une solution simple consiste à définir l'arrière-plan avec l'équivalent des valeurs RVB:

[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 l'arrière-plan en vue de la couleur à Blanc ou tout ce que vous aimez dans le xib pour supprimer l'avertissement.

18

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.Ne hésitez pas à changer le code de dessin :)

+0

Belle solution d'un point de vue technique ;-) Cependant, le problème que je vois avec ceci est qu'Apple a changé l'apparence de fond des groupés vues de table avec iOS 6. Ainsi, cette méthode ne couvre pas toutes les versions iOS. Et même si elle vérifiait au moment de l'exécution la version iOS, ce ne serait pas une solution à l'épreuve du temps. – Tafkadasoh

+0

Vous devez inclure [tableViewBackgroundImage retain]; si vous gérez des allocations de mémoire directement dans votre application. Sinon, il se bloquera la deuxième fois que vous accéderez à la nouvelle couleur. – DDRider62

+0

@glsaza vous avez raison, mais avec ARC, il ne plante pas car les variables statiques sont fortes par défaut (le __strong n'est pas vraiment nécessaire, mais plus explicite). – Felix

2

Essayez ceci:

[myTableView setBackgroundView:nil]; 
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]]; 
25

D'abord, ajoutez à votre viewDidLoad:

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

OU

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]]; 

Puis ajouter ces images à votre application:

tableViewBackground.png

tableViewBackground.png

[email protected]

tableViewBackground@2x.png

+1

Court, doux, perfection! – ToddB

+0

Est-ce que cela correspondra également à l'utilisation sur iPad? Je ne me souviens pas si le motif va se chevaucher sur le côté proprement.Si c'est le cas, cela fonctionnerait très bien (des votes tout autour) – cynistersix

+0

Haha bizarre que je suis arrivé sur ce que je passais par le guide BNR pour iOS. Heureux de travailler avec vous Elvis. :-) – Vinay

6

Si cela peut aider tout le monde, voici précisément ce que je fais à mon avis personnalisé pour obtenir ce fond (en utilisant le conseil 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]; 
    // ... 
} 
0

Il est recommandé d'utiliser des méthodes standard pour les versions précédentes d'iOs. Donc, je me suis améliorée 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]; 
    } 
} 
1

Vous pouvez avoir le temps difficile à localiser le point de vue si vous utilisez storyboard et ont beaucoup de points de vue. 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

0

Développant @ solution de NSElvis, voici l'actif de fond de vue table groupée identique (il est assez large pour que vous ne soyez pas des effets amusants en orientation paysage)

[email protected]

Pour l'utiliser, il suffit de faire

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