在UIImageView和UITableViewCell之间添加NSLayoutConstraint
我试图在UITableViewController中的两个元素之间添加约束,到目前为止,我还没有做到。在UITableViewController里面,但在UITableView Cell之外的UIImage视图。在UIImageView和UITableViewCell之间添加NSLayoutConstraint
我既不能使用StoryBoard,也不能用编程方式添加约束,因为Xcode告诉我,我无法在要重用的对象上添加约束。
我试图添加约束的原因是因为UIImageView动态调整大小的下载图像的大小。无论何种原因无法下载图像时,都会使用默认图像,整个版面会分开。
这里是我的tableView的样子:
您可以考虑来包装你UIImageView
到UITableViewCell
,并把它作为UITableView
第一个单元格。此外,您可以将表格视图中的单元格层次细分为两部分,这样可以简化对单元格的跟踪。所以第一部分将只包含UIImageView
单元格,第二部分将包含您的主单元格。
每当你会得到从网络请求表示该图像获取的响应,你可以调用tableView.reloadSections(IndexSet(integer: 0), with: .none)
和委托方法返回正确的高度
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) {
if indexPath.section == 0 {
return imageHeight
}
}
的问题是,限制设置两个对象之间的关系。由于您的tableViewCell将被重用,因此您无法将约束设置为在单元格外对象。
实际上,您可以获取单元格上图像的大小,并根据cellImageView大小以编程方式将约束设置到ImageView外部。
例如,如果下载的图像宽度是imageCellWidth,并且您的超大图像应该是2倍大。
NSLayoutConstraint *imageViewWidth = [NSLayoutConstraint
constraintWithItem:imageView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNonAnAttribure
multiplier:1.0f
constant:imageCellWidth*2];
[imageView addConstraint: imageViewWidth];
如果您需要动态改变这个约束,只是改变恒定值
imageViewWidth.constant = newWidth;
你有没有考虑加入您的UIImageView到的UITableViewCell和将它作为tableView中的第一个单元格,并在每次从服务器获取图像时更改单元格的高度? –
@noir_eagle,不,我没有,但这是一个好主意。我会给它一个镜头。谢谢。 – Sicypher
@noir_eagle你应该发表你的评论作为答案。我会接受它作为最好的答案,因为它最适合我。 – Sicypher