2010-10-27 3 views
0

J'utilise la méthode CAGradientLayer à partir de cette answer pour définir un dégradé sur mes UITableViewCells.Redimensionnement automatique de la couche de dégradé UITableViewCell

Cependant, pour cette table, j'ai augmenté la hauteur des cellules via tableView: heightForRowAtIndexPath :. Mon calque de dégradé ne couvre plus toute la hauteur de la cellule, mais s'arrête à la hauteur d'origine (voir pic).

J'ai essayé de définir l'image de la couche aux limites de la cellule dans tableView: cellForRowAtIndexPath: mais cela ne fonctionnait pas non plus. Y a-t-il un moyen de spécifier que la couche doit être autorésisée?

Merci!

code:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 55; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     CAGradientLayer *gradient = [CAGradientLayer layer]; 
     gradient.colors = [NSArray arrayWithObjects: 
          (id)[[UIColor purpleColor] CGColor], 
          (id)[[UIColor redColor] CGColor], 
          nil]; 
     [cell.layer insertSublayer:gradient atIndex:0]; 
    } 
    cell.layer.borderWidth = 1.0; 
    CALayer* gradientLayer = [cell.layer.sublayers objectAtIndex:0]; 
    DebugLog(@"cell bounds: %@", NSStringFromCGRect(cell.bounds)); 
    gradientLayer.frame = cell.bounds; 

    // Configure the cell... 
    return cell; 
} 
+0

S'il vous plaît envoyer votre code de cellForRowAtIndexPath et heightForRowAtIndexPath. – MrZoidberg

Répondre

0

Je fini par utiliser la méthode de » UITableViewDelegate:

- (void)tableView:(UITableView *)tableView 
    willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath; 

Dans ce document, je vérifie si la couche de gradient a déjà été ajouté, et sinon, je l'ajoute.
Pas totalement content de ça, mais ça m'a permis de passer à autre chose.

0

Je pense que vous allez la mauvaise façon de personnaliser vos cellules de table. Voir le http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html.

+0

Oui, peut-être que c'est une meilleure façon de le faire à long terme, c'est-à-dire quand un artiste manipule ces images. Pour l'instant, je voulais juste être en mesure de modifier l'apparence facilement avec du code au lieu d'avoir à faire face à des images et un programme de peinture. – initlaunch

1

Si vous aviez ce problème si la hauteur de votre cellule est codée 55, alors vous devriez faire ce qui suit, cela remplira alors la cellule de cette table.

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
    gradientLayer.frame = CGRectMake(0, 0, 320, 55); 

ne faites pas

gradientLayer.frame = cell.bounds; 
+0

cela a fonctionné parfaitement pour moi! – goelv

Questions connexes