是否可以在 UITableViewCell 内的 UIImageView 上设置固定宽度?
Posted
技术标签:
【中文标题】是否可以在 UITableViewCell 内的 UIImageView 上设置固定宽度?【英文标题】:Is it possible to set a fixed width on the UIImageView inside a UITableViewCell? 【发布时间】:2010-02-11 09:01:53 【问题描述】:我有一个 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 像素宽吗?即使该 imageView 没有图像?
这可以通过编程方式完成,还是我必须在 InterfaceBuilder 中创建一个自定义单元格,甚至创建我自己的 UITableViewCell 后代。
欢迎提供有关此主题的任何信息。
问候,
史蒂芬
【问题讨论】:
【参考方案1】:表格单元格中的 imageView 属性是只读的,但是,imageView 的属性与通常一样,因此您可以通过它的 frame 属性来操作它的宽度。
我几乎可以肯定,设置一个空的 imageView 的宽度不会有帮助。我相信如果 imageView 不包含图像,表格单元格不会将其添加为子视图...
在没有图像的单元格上,您可以尝试设置 textLabel 的框架,以便它的原点是其他 textLabel 的位置(如果存在图像)?请记住,如果这样做,您也必须缩短 textLabels 的宽度。
【讨论】:
【参考方案2】:一种更简单但更简单的方法:
1) 确保您的图片具有相同的宽度。使用像 Acorn 这样的图像编辑器用透明区域填充图像。
2) 制作一个 30(或其他)像素宽的透明 .png。将此设置为没有图标的行上的图像。
3) 没有第三步!
【讨论】:
嗨,A其实也考虑过这个问题。如果图像的大小相同,那会让我的生活更轻松。 很快做了一个测试。将我的图标大小调整为 30x30,问题解决了 :-) 可能想要选择一个稍微小一点的图标大小,可能 28 x 28 也可以。感谢您的提示。以上是关于是否可以在 UITableViewCell 内的 UIImageView 上设置固定宽度?的主要内容,如果未能解决你的问题,请参考以下文章
除非滚动表格,否则 UITableViewCell 内的 UIView 调整大小不显示
UITableViewCell 内的 UIStackView
UITableViewCell 内的 UITextField 不会在 iPad 上激活,但在 iPhone 上有效