是否可以在UITableViewCell内的UIImageView上设置固定宽度?

时间:2010-02-11 09:01:54

标签: iphone uitableview uiimageview width

我有一个UITableView,当然我使用了一些UITableViewCells。现在有些单元格有一个图标/图像,我想在文本前面显示,而另一些则没有。我没有在Interface Builder中创建UITableViewCells,只使用默认的东西:

//自定义表格视图单元格的外观。 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
switch (indexPath.row) {
    case 0:
        cell.textLabel.text = @"Nearby";
        cell.imageView.image = [UIImage imageNamed:@"marker.png"];
        break;
    case 1:
        cell.textLabel.text = @"Bookmarked";            
        cell.imageView.image = [UIImage imageNamed:@"bookmark.png"];
        break;
    case 2:
        cell.textLabel.text = @"Other";
        break;
    default:
        break;
}

return cell;

}

这似乎工作得很好,但我对cell.imageView的宽度有一点问题。我正在使用的图标似乎有不同的宽度。有些是21像素,有些是25像素,在某些演员表中我根本没有图标。

这导致textLabel的文本出现在不同的位置(取决于imageView的宽度)。

现在我的问题是,我可以添加一些代码/语句,以确保我的单元格的imageView总是30像素宽吗?即使该图像没有图像吗?

这可以以编程方式完成,还是必须在InterfaceBuilder中创建自定义单元格,甚至创建自己的UITableViewCell后代。

欢迎提供有关此主题的任何信息。

此致

斯特凡

2 个答案:

答案 0 :(得分:1)

表格单元格中的imageView属性是只读的,但是,imageView的属性与通常一样,因此您可以通过它的框架属性来操纵它的宽度。

我几乎可以肯定,设置一个空的imageView的宽度是没有用的。我相信如果imageView不包含图像,表格单元格不会将其添加为子视图...

在没有图像的单元格上,您可以尝试设置textLabel的框架,使其原点是图像存在时其他textLabel的位置?请记住,如果这样做,您还必须缩短textLabels宽度。

答案 1 :(得分:0)

稍微容易但更黑客的方式:

1)确保您的图像宽度相同。使用像Acorn这样的图像编辑器来填充透明区域的图像。

2)制作透明的.png 30(或其他)像素宽。将其设置为没有图标的行上的图像。

3)没有第三步!