我正在表格中的单元格上显示图像。我有
中的代码- (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]];
有人可以建议我哪里出错吗?
答案 0 :(得分:1)
有几种可能的可能性:
首先,您可能需要仔细检查以确保您拥有
cell.imageView.clipsToBounds = YES;
如果不这样做,当图像的大小适合UIImageView
时,图像会在图像视图的边界上出血。我注意到这个问题,特别是当我在后台队列中加载这个图像时。
第二次,如果您在后台设置imageView
的{{1}}属性(如下面的简化示例代码),您应该知道这一点非常重要在启动背景图像加载过程之前,使用空白图像正确初始化图像。因此,从基于Web的源加载单元格时,非常常见的代码示例如下:
UITableViewCell
显然,如果您执行此类操作,则需要确保- (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
条目时,不要使用{{1}的标准UITableViewCell
属性名称},UITableViewCell
等。请务必使用您自己的唯一名称。如果您使用imageView
,系统会在您的新textLabel
和imageView
的默认IBOutlet
属性之间混淆。