2013-04-10 2 views
7

Я хотел бы настроить поля или прокладки для ячеек UITableView imageView, как я мог это сделать? С heightForRowAtIndexPath Я могу установить только высоту строк. И это просто увеличивает изображение в ячейке, если я его увеличу.UITableViewCell imageView padding

Вот мой метод 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; 
} 

В настоящее время я знаю только один способ, как я могу это сделать - сжать содержимое изображения из изображений с помощью Photoshop или похожую программу, оставаясь в то же время. Но такой метод займет много времени, и я думаю, что должен быть более простой способ сделать это.

ответ

15

Без подклассов:

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

изменить «.5» с правильной пропорцией f или ваш случай

+7

Это умная идея! Кстати, выражение правой стороны может быть дополнительно упрощено до 'CGAffineTransformMakeScale (0.5, 0.5)'. – Pang

+2

Не работает для меня. –

9

Лучшее решение здесь - создать свою собственную ячейку, добавить изображение, метки внутри contentView и настроить их как хотите.

Но есть и другой путь, снова вы должны создать подкласс от UITableViewCell и переопределить layoutSubviews селектор:

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

, к сожалению, это, кажется, в результате мой текст прикрываясь изображения. – Sam

3

Это работает на прошивке 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

, который кажется очень креативным, но, к сожалению, он не работает для меня. Есть идеи? – umair151

+0

@ umair151 это работает для меня, хотя я использую '.offsetInPlace (dx: dy:)' вместо того, чтобы напрямую манипулировать свойствами '.origin' и' .size' – Alnitak

+0

Для тех, кто задается вопросом, 'offsetInPlace' является эквивалентом 'CGRectOffset'. –

0

обновлялись swift3

cell?.imageView?.transform = CGAffineTransform(scaleX: 0.6, y: 0.6) 
Смежные вопросы