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

如何增加 UItableviewcell 内的 UItableview 高度?

捏放大到 UITableViewCell 内的 UIImageView