定位UITableViewCell的imageView

时间:2010-11-17 20:20:11

标签: iphone cocoa-touch uitableview uiimageview

在UITableView的每个UITableViewCell中,我都在其imageView中放置一个图像。但是,如果我使用tableView:heightForRowAtIndexPath:来增加单元格的高度以容纳更多文本,我发现:

  1. 图像垂直居中对齐。
  2. 图像的左边距增加。这会将文本向右推,使其左边距不再与上方和下方单元格中的文本对齐。
  3. 我希望图像垂直对齐,以便它位于单元格的左上角(就像下图中的第一个单元格)并且没有增加左边距(以便第二个单元格中文本的左边距与第一个单元格中的文本对齐。

    改变imageView的框架,中心等似乎没有任何影响。有任何想法吗?感谢...

    (我有一个问题的图像,但是我不会让我发布一张图片,因为我是一个名声不到10的菜鸟.Grrr ......)

6 个答案:

答案 0 :(得分:46)

您需要继承UITableViewCell并覆盖layoutSubviews,如下所示:

- (void) layoutSubviews
{   
    [super layoutSubviews];

    self.imageView.frame = CGRectMake( 10, 10, 50, 50 ); // your positioning here
}

在您的cellForRowAtIndexPath:方法中,请务必返回新单元格类型的实例。

答案 1 :(得分:6)

您认为需要调整默认样式中项目的大小或位置的那一刻,您需要考虑创建自定义单元格的时间,其中您自己的项目大小和位置与您希望的一样。这就是您可以创建自定义单元格的原因。 :)

答案 2 :(得分:4)

另一种方式(适用于iOS 6)是创建UIImageView并将其作为子视图添加到单元格

 UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x,y,20,20)];

[yourImageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]]]; //You can have an Array with the name of 

[yourcell.contentView addSubview:yourImageView]; //add the imageView as a subview

答案 3 :(得分:1)

你可能没有尝试过的一个非常有用的功能(在UITableViewDelegate中)是tableView:willDisplayCell:forRowAtIndexPath:。它在显示单元格之前立即调用,其目的是使您能够在没有操作系统的情况下对布局执行操作,然后再显示它。实际上你有完全控制权。我用它来更改单元格中的字体,但你也可以迭代单元格的子视图并修改它们的框架。

我仍然同意你现在是时候研究自定义单元并停止对抗操作系统了。这并不难做到,Apple在Table View Programming Guide for iOS中给出了一个很好的例子。

答案 4 :(得分:0)

您可以创建自定义单元格并将对象放置在您需要的位置以及设置自动遮罩值。

答案 5 :(得分:0)

TomSwift解决方案的Swift 4变体(非常适合我):

override public func layoutSubviews() {
        super.layoutSubviews()
        imageView?.frame = CGRect( x: 16, y: 9, width: imageView!.intrinsicContentSize.width, height:  imageView!.intrinsicContentSize.height)
    }