异步将图像加载到autolayout UIImageView中

时间:2014-07-12 20:23:59

标签: objective-c uiimageview autolayout

我已经搜索过了,并没有专门针对Autolayout找到答案。

我有一个使用Autolayout的UITableViewCell。 UIImageView被约束为从Cell边缘和Label的后缘边缘12 pt。

UITableViewCell

以异步方式检索图像并将其分配给UIImageView的图像属性。

[self downloadImageWithURL:[NSURL URLWithString:imageUrlString] completionBlock:^(BOOL succeeded, UIImage *image) {
  if (succeeded) {
    weakSelf.newsImageView.image = image;
    // [weakSelf.contentView layoutIfNeeded];
  }
}];

如果在cellForRowAtIndexPath中为单元格的图像指定了空白占位符图像,则会加载并显示异步检索的图像。如果空白占位符分配已注释掉,则永远不会显示异步检索的图像。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    SCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableCellIdentifier];
    //    cell.newsImageView.image = _blankImage;
    return cell;
}

我尝试了layoutIfNeeded(上面已注释掉)和updateConstraintsIfNeeded以查看图像是否会出现,但它不起作用。所以现在我首先在那里放了一张空白图像,这看起来像是一个黑客,如果依赖于图像的固有内容大小可能会有所不同,那就不灵活了。在第一次布局发生时,约束是否已经优化?任何人都知道发生了什么以及如何解决它?

2 个答案:

答案 0 :(得分:0)

尝试在完成处理程序中的invalidateIntrinsicContentSize上调用:UIImageView。这应该强制自动布局系统重新计算视图的内在大小。可能的话,您可能还需要在此之后调用updateConstraintsIfNeeded(但先尝试不用)。

如果这不起作用并且您的UIImageView具有已知大小,则可以尝试继承UIImageView并覆盖-intrinsicContentSize方法。从中返回已知大小。

答案 1 :(得分:0)

原来这个笔尖有两个出口引用了同一个UIImageView元素。代码中不存在一个插座,但仍然在nib UI中链接。一定是重构中的一个不幸事件,但删除它会修复它。