1

我在表格中的单元格上显示图像。我有里面的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

当我使用故事板时,所以我在单元格中显示了图像

cell.imageView.image = [UIImage imageNamed:_lotImagesArray[row]];

但是,当我尝试从网络服务器加载图像时,图像位于单元格中的标签顶部(阻止标签文本)

我用来从网络服务器显示图像的代码是这样的:

NSString *strURL = [NSString stringWithFormat:@"http://www.domainhere.com/images/%@", lotPhoto[row]];
NSURL *url = [[NSURL alloc] initWithString:strURL ];
cell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

有人可以建议我哪里出错了吗?

4

1 回答 1

1

几种可能的可能性:

首先,您可能需要仔细检查以确保您有

cell.imageView.clipsToBounds = YES;

如果你不这样做,当它调整图像大小以适合 时UIImageView,图像可能会溢出图像视图的边界。我注意到这个问题,特别是当我在后台队列中加载这个图像时。

其次,如果您在后台设置imageView属性UITableViewCell(如下面的简化示例代码),您应该知道在开始背景图像加载过程之前使用空白图像正确初始化图像很重要。因此,从基于 Web 的源加载单元格时非常常见的代码示例如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    cell.textLabel.text = ... // you configure your cell however you want

    // make sure you do this next line to configure the image view

    cell.imageView.image = [UIImage imageNamed:@"blankthumbnail.png"];

    // now let's go to the web to get the image

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        UIImage *image = ... // do the time consuming process to download the image

        // if we successfully got an image, remember, ALWAYS update the UI in the main queue
        dispatch_async(dispatch_get_main_queue(), ^{
            // let's make sure the cell is still visible (i.e. hasn't scrolled off the screen)
            UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
            if (cell)
            {
                cell.imageView.image = image;
                cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
                cell.imageView.clipsToBounds = YES;
            }
        });
    });

    return cell;
}

显然,如果您执行类似的操作,您需要确保[UIImage imageNamed:@"blankthumbnail.png"];没有返回nil(即确保您的应用程序成功地在包中找到它)。常见问题可能包括根本没有空白图像、名称错误、未能将图像包含在目标设置中、“构建阶段”选项卡下、“复制捆绑资源”下。

第三,您需要确保在使用子类UITableViewCell条目时,不要使用 , 等的标准属性UITableViewCell名称。确保使用您自己的唯一名称。如果你使用,系统会混淆你的新属性和默认属性。imageViewtextLabelimageViewIBOutletimageViewUITableViewCell

于 2012-11-28T00:06:08.500 回答