UITableViewCell 内的 UIImageView
Posted
技术标签:
【中文标题】UITableViewCell 内的 UIImageView【英文标题】:UIImageView inside a UITableViewCell 【发布时间】:2011-12-01 06:31:34 【问题描述】:我正在尝试在 UITableViewCell 中显示 UIImageView。
内部方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我有:
- (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];
CGSize cellSize = cell.frame.size;
CGFloat cellWidth = cellSize.width;
CGFloat cellHeight = cellSize.height;
CGRect imageFrame = CGRectMake(0, 0, 70, cellHeight);
UIImageView * image = [[UIImageView alloc] initWithFrame:imageFrame];
[image setImage:[UIImage imageWithContentsOfFile:@"cyan.jpg"]];
CGRect nameFrame = CGRectMake(80, 0, cellWidth-80, cellHeight/2);
UILabel * nameLabel = [[UILabel alloc] initWithFrame:nameFrame];
nameLabel.text = @"Name: John Doe";
CGRect jobFrame = CGRectMake(80, 20, cellWidth-80, cellHeight/2);
UILabel * jobLabel = [[UILabel alloc] initWithFrame:jobFrame];
jobLabel.text = @"Job: IT-Consultant";
[cell addSubview:image];
[cell addSubview:nameLabel];
[cell addSubview:jobLabel];
return cell;
标签显示完美,但我看不到图像。
任何帮助将不胜感激。
【问题讨论】:
两件事:1) UITableViewCell 中已经有一个 UIImageView,您可以通过imageView
属性访问它 - 以防万一您的情况有帮助,2) 您可以在某处显示图像否则要验证它确实正确加载和显示,并且在将其添加到单元格时发生错误?
1) imageView
不可分配。 2)我没有尝试过。会试一试的。
1) 正确,但 imageView.image
是可分配的。 2)让我知道它是否有效,祝你好运:)
1) 没用,可能是因为 2。 2) 我按照 gschandler 说的做了,改变了 imageview 的背景。现在我可以看到视图正是我期望的位置,但其中没有图像。这意味着图像永远不会加载。我尝试加载另一个图像,甚至尝试 png,尝试先将其加载到 NSData,然后再加载到 UIImage,但没有任何效果。这很奇怪。
请不要在 Cocoa Touch 问题中使用可可标签。请改用 cocoa-touch 标签。
【参考方案1】:
imageWithContentsOfFile:
期望将路径发送给它。请改用imageNamed:
,或先使用NSBundle
的pathForResource... 方法获取路径,然后先获取路径。
另外,如果每个单元格的图像都相同,您应该在 cell=nil 块内添加图像视图,否则您将一遍又一遍地添加视图。
【讨论】:
【参考方案2】:改为将其添加到UITableViewCell
contentView。
[cell.contentView addSubview:...];
【讨论】:
做到了,但仍然遇到同样的问题。标签显示但不显示图像。 检查您的各种子视图 autoreisizingMasks。确保当单元格调整大小时它们不会相互覆盖,这将在添加到表格后执行。当我遇到子视图问题时,我将每个子视图的 backgroundColor 设置为不同的亮色,以确保视图位于我期望的位置,等等。 谢谢,这对我帮助很大。我改变了背景的颜色,现在我可以清楚地看到 uiimageview 正是我期望的位置。所以问题一定是图像无法加载。将对此进行更多研究。 您的图片是否已添加到您的项目中,以便正确复制到您的包中?那个经常咬我。 另请注意,加载图像的原始代码需要完整路径,而不仅仅是文件名。[UIImage imageNamed:]
需要图像在包中,而 [UIImage imageWithContentsOfFile:]
需要完整路径。【参考方案3】:
使用 UITableViewCell 的 imageView 属性而不是你正在做的事情。为了更清楚,使用 cell.imageView.image 并将你的 UIImage 设置为那个。
或者,如果您希望图像的位置更灵活,请将 imageView 添加到单元格的 contentView。即:[cell.contentView addSubview:yourImageView];
【讨论】:
imageView
属性不可分配。如果您的意思是 image
属性,它已被弃用。我也尝试设置contentView
,仍然遇到同样的问题。标签显示但不显示图像。以上是关于UITableViewCell 内的 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 内的 UIImageView
UITableViewCell 内的多个堆栈视图内的多行标签
UITableViewCell 内的 UIView 上的 UIGestureRecognizer
UITableViewCell 内的 UIStackView