在 UITableview 单元格中折叠 UIImageview,当它不是 return 图像时
Collapse UIImageview in UITableview cell, when it doesn't return an image
问题总结
我有一个 UITableView,我想在其中折叠它的 UIImageView 单元格部分,只要它没有 return 图像,如下所示
表格视图单元格的第一张图片(预期结果)
表格视图单元格的第二个图像(无图像结果)
背景包括我已经尝试过的
下面是我一直在处理的一段代码。另请注意,我正在使用 SDWebImage 获取和设置应用程序中的图像(tableview 委托中的任何方法、SDWebImage 协议等我缺少的只是指向我),
The comment out part is what I have done, i.e. used constraints to try
the collapse of UIimageView not it messes up the whole tableView upon
scrolling
代码
这是我正在处理的一段代码,
[cell.i_imageView sd_setImageWithURL:[NSURL URLWithString: item.PostimageUrl] placeholderImage:[UIImage imageNamed:@"no-image"] options:SDWebImageRefreshCached completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
if(!image)
{
//cell.i_imageView.hidden = YES;
NSLog(@"why no image des:%@",error);
NSLog(@"why no image url:%@",imageURL);
}
// cell.imageHolderAspectConstraint.active = TRUE;
// cell.imageHolderZeroImageConstraint.active = FALSE;
// }
// else
// {
// cell.imageHolderAspectConstraint.active = FALSE;
// cell.imageHolderZeroImageConstraint.active = TRUE ;
//
// [cell layoutIfNeeded];
// [cell setNeedsLayout];
// }
[cell.i_imageView sd_removeActivityIndicator];
}];
非常感谢在此问题上提供的任何帮助,干杯。
编辑
这里是故事板部分的图片,我需要在哪里嵌入stackview
在 StackView
中添加您的 ImageView
。现在当图像不可用时隐藏您的 ImageView。
注意: UIStackView 自动处理单元格的高度。
Edit:
目前你的 UI 是这样的。
现在 select 你的图像持有视图并点击嵌入和 select UIStackView。
现在将您为保持视图所赋予的相同约束分配给 stackView。
现在你的层次结构如下
最后,您需要在 CellForRow 中执行以下代码:
cell.vImageHoldingView.hidden = !image;
- 如果在 stackView 中则嵌入
- 将堆栈视图锚点附加到所需的锚点
- 根据需要隐藏图像视图。
StackView 自动折叠其隐藏 arrangedSubViews
注意:如果你设置图片nil
,它会再次崩溃,因为stackView是根据它的图片来管理imageView高度的。
如果没有图片,将ImageView
高度设为0
。如果有适当的约束,剩下的事情将得到处理。
将图片底部约束设为出口。像这样
var bottomViewConstraints: NSLayoutConstraint!
并在折叠和展开时赋予价值。像这样
bottomViewConstraints.constant = 0 // expand
bottomViewConstraints.constant = 60 // collapse
问题总结
我有一个 UITableView,我想在其中折叠它的 UIImageView 单元格部分,只要它没有 return 图像,如下所示
表格视图单元格的第一张图片(预期结果)
背景包括我已经尝试过的
下面是我一直在处理的一段代码。另请注意,我正在使用 SDWebImage 获取和设置应用程序中的图像(tableview 委托中的任何方法、SDWebImage 协议等我缺少的只是指向我),
The comment out part is what I have done, i.e. used constraints to try the collapse of UIimageView not it messes up the whole tableView upon scrolling
代码
这是我正在处理的一段代码,
[cell.i_imageView sd_setImageWithURL:[NSURL URLWithString: item.PostimageUrl] placeholderImage:[UIImage imageNamed:@"no-image"] options:SDWebImageRefreshCached completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
if(!image)
{
//cell.i_imageView.hidden = YES;
NSLog(@"why no image des:%@",error);
NSLog(@"why no image url:%@",imageURL);
}
// cell.imageHolderAspectConstraint.active = TRUE;
// cell.imageHolderZeroImageConstraint.active = FALSE;
// }
// else
// {
// cell.imageHolderAspectConstraint.active = FALSE;
// cell.imageHolderZeroImageConstraint.active = TRUE ;
//
// [cell layoutIfNeeded];
// [cell setNeedsLayout];
// }
[cell.i_imageView sd_removeActivityIndicator];
}];
非常感谢在此问题上提供的任何帮助,干杯。
编辑
这里是故事板部分的图片,我需要在哪里嵌入stackview
在 StackView
中添加您的 ImageView
。现在当图像不可用时隐藏您的 ImageView。
注意: UIStackView 自动处理单元格的高度。
Edit:
目前你的 UI 是这样的。
现在 select 你的图像持有视图并点击嵌入和 select UIStackView。
现在将您为保持视图所赋予的相同约束分配给 stackView。
现在你的层次结构如下
最后,您需要在 CellForRow 中执行以下代码:
cell.vImageHoldingView.hidden = !image;
- 如果在 stackView 中则嵌入
- 将堆栈视图锚点附加到所需的锚点
- 根据需要隐藏图像视图。
StackView 自动折叠其隐藏 arrangedSubViews
注意:如果你设置图片nil
,它会再次崩溃,因为stackView是根据它的图片来管理imageView高度的。
如果没有图片,将ImageView
高度设为0
。如果有适当的约束,剩下的事情将得到处理。
将图片底部约束设为出口。像这样
var bottomViewConstraints: NSLayoutConstraint!
并在折叠和展开时赋予价值。像这样
bottomViewConstraints.constant = 0 // expand
bottomViewConstraints.constant = 60 // collapse