我已经搜索过了,并没有专门针对Autolayout找到答案。
我有一个使用Autolayout的UITableViewCell。 UIImageView被约束为从Cell边缘和Label的后缘边缘12 pt。
以异步方式检索图像并将其分配给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以查看图像是否会出现,但它不起作用。所以现在我首先在那里放了一张空白图像,这看起来像是一个黑客,如果依赖于图像的固有内容大小可能会有所不同,那就不灵活了。在第一次布局发生时,约束是否已经优化?任何人都知道发生了什么以及如何解决它?
答案 0 :(得分:0)
尝试在完成处理程序中的invalidateIntrinsicContentSize
上调用:UIImageView
。这应该强制自动布局系统重新计算视图的内在大小。可能的话,您可能还需要在此之后调用updateConstraintsIfNeeded
(但先尝试不用)。
如果这不起作用并且您的UIImageView
具有已知大小,则可以尝试继承UIImageView
并覆盖-intrinsicContentSize
方法。从中返回已知大小。
答案 1 :(得分:0)
原来这个笔尖有两个出口引用了同一个UIImageView元素。代码中不存在一个插座,但仍然在nib UI中链接。一定是重构中的一个不幸事件,但删除它会修复它。