2013-04-10 20 views
7

Tôi muốn thiết lập lề hoặc paddings cho các ô UITableView imageView, làm thế nào tôi có thể làm điều đó? Với heightForRowAtIndexPath Tôi chỉ có thể đặt chiều cao của hàng. Và nó chỉ phóng to hình ảnh trong ô nếu tôi tăng nó.UITableViewCell imageView padding

Đây là phương pháp cellForRow tôi

- (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; 
} 

Hiện nay tôi chỉ biết một phương pháp làm thế nào tôi có thể làm điều đó - thu nhỏ nội dung hình ảnh của những hình ảnh sử dụng photoshop hoặc chương trình tương tự khi lưu trú tại cùng một thời điểm. Nhưng phương pháp như vậy sẽ mất rất nhiều thời gian, và tôi đoán nên có cách dễ dàng hơn để làm điều này.

Trả lời

15

Without subclassing:

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

thay đổi '.5' với tỷ lệ phù hợp f hoặc trường hợp của bạn

+7

Đó là một ý tưởng thông minh! Nhân tiện, biểu thức bên tay phải có thể được đơn giản hóa hơn nữa thành 'CGAffineTransformMakeScale (0.5, 0.5)'. – Pang

+2

Không hiệu quả với tôi. –

9

Giải pháp tốt nhất ở đây là tạo ô của riêng bạn, thêm hình ảnh, nhãn bên trong contentView và tinh chỉnh chúng theo cách bạn muốn.

Nhưng có còn một cách khác, một lần nữa bạn cần phải tạo ra một lớp con từ UITableViewCell và ghi đè layoutSubviews selector:

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

không may điều này dường như dẫn đến văn bản của tôi được bao phủ bởi các hình ảnh. – Sam

3

này hoạt động trên 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

dường như rất sáng tạo, nhưng tiếc là nó không hoạt động đối với tôi. Bất kỳ ý tưởng? – umair151

+0

@ umair151 nó hoạt động cho tôi, mặc dù tôi đang sử dụng '.setsetInPlace (dx: dy:)' thay vì thao tác các thuộc tính '.origin' và' .size' trực tiếp – Alnitak

+0

Đối với những người tự hỏi, 'offsetInPlace' là tương đương với 'CGRectOffset'. –

0

cập nhật cho swift3

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