在 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