2013-04-10 1 views
7

vorrei per impostare i margini o imbottiture per UITableView cellule IMAGEVIEW, come potrei farlo? Con heightForRowAtIndexPath posso solo impostare altezza righe. E ingrandisce semplicemente l'immagine nella cella se la aumento.UITableViewCell ImageView imbottitura

Ecco il mio metodo cellForRow

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellID = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease]; 
     cell.textLabel.numberOfLines = 1; 
     cell.textLabel.font = [UIFont systemFontOfSize:kSystemFontSize]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
     cell.textLabel.textColor = [UIColor whiteColor]; 
    } 
    cell.textLabel.text = [_dataArray objectAtIndex:indexPath.row]; 
    cell.imageView.image = [UIImage imageNamed:[_imageArray objectAtIndex:indexPath.row]]; 
    cell.backgroundColor = [UIColor clearColor]; 

    return cell; 
} 

Attualmente conosco solo un metodo come avrei potuto farlo - compattare il contenuto dell'immagine delle immagini con Photoshop o un programma simile durante il soggiorno allo stesso tempo. Ma un tale metodo richiederebbe molto tempo e immagino che ci dovrebbe essere un modo più semplice per farlo.

risposta

15

Senza subclassing:

cell.imageView.transform = CGAffineTransformScale(CGAffineTransformIdentity, .5, .5); 

cambiamento della' 0,5' con la giusta proporzione f o il vostro caso

+7

Questa è una buona idea! A proposito, l'espressione del lato destro può essere ulteriormente semplificata con 'CGAffineTransformMakeScale (0.5, 0.5)'. – Pang

+2

Non funziona per me. –

9

La soluzione migliore è quello di creare il proprio cellulare, aggiungere immagini, etichette all'interno di contentView e modificarli come si desidera.

Ma c'è anche un altro modo, ancora una volta è necessario creare una sottoclasse da UITableViewCell e sovrascrivere layoutSubviews selettore:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    self.imageView.frame = CGRectMake(10, 10, 50, 50); 
    self.imageView.contentMode = UIViewContentModeCenter; 
} 
+2

purtroppo questo sembra provocare il mio testo è coperto con l'immagine. – Sam

3

Questo funziona su iOS 7:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    CGRect imageViewFrame = self.imageView.frame; 
    imageViewFrame.origin.x = 10; 
    imageViewFrame.origin.y += 5; 
    imageViewFrame.size.height -= 10; 
    imageViewFrame.size.width -= 10; 
    self.imageView.frame = imageViewFrame; 
} 
+0

che sembra molto creativo, ma sfortunatamente non funziona per me. Qualche idea? – umair151

+0

@ umair151 funziona per me, anche se sto usando '.offsetInPlace (dx: dy:)', piuttosto che manipolare il '' .origin' e proprietà .size' direttamente – Alnitak

+0

Per coloro che chiedono, 'offsetInPlace' è l'equivalente di 'CGRectOffset'. –

0

aggiornamento per swift3

cell?.imageView?.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)