2013-04-10 23 views
7

Chciałbym ustawić marginesy lub paddings dla komórek UITableView imageView, w jaki sposób mogę to zrobić? Z heightForRowAtIndexPath mogę ustawić wysokość wierszy. I po prostu powiększa obraz w komórce, jeśli go zwiększę.UITableViewCell imageView padding

Oto moja metoda 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; 
} 

Obecnie Znam tylko jeden sposób, jak mogę to zrobić - kurczyć zawartość obrazu z obrazów przy użyciu programu Photoshop lub similiar podczas pobytu w tym samym czasie. Ale taka metoda zajęłaby dużo czasu i wydaje mi się, że powinien istnieć łatwiejszy sposób na zrobienie tego.

Odpowiedz

15

Bez podklasy:

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

zmienić ".5" przy odpowiedniej proporcji f lub Twoja sprawa

+7

To sprytny pomysł! Nawiasem mówiąc, wyrażenie po prawej stronie można dodatkowo uprościć do 'CGAffineTransformMakeScale (0.5, 0.5)'. – Pang

+2

Nie działa dla mnie. –

9

Najlepszym rozwiązaniem jest tutaj utworzenie własnej komórki, dodanie obrazu, etykiet wewnątrz contentView i dostosowanie ich w dowolny sposób.

Ale jest też inny sposób, znowu trzeba utworzyć podklasę z UITableViewCell i zastąpić layoutSubviews selektora:

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

niestety to wydaje się prowadzić mój tekst jest objęty obrazu. – Sam

3

To działa na 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

który wydaje się być bardzo kreatywny, ale niestety to nie działa dla mnie. Dowolny pomysł? – umair151

+0

@ umair151 to działa dla mnie, chociaż używam '.offsetInPlace (dx: dy:)' zamiast manipulować własnościami '.origin' i' .size' bezpośrednio – Alnitak

+0

Dla tych, którzy się zastanawiają, 'offsetInPlace' jest odpowiednikiem 'CGRectOffset'. –

0

aktualizowana swift3

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