[英]Dynamic cell height in UICollectionView
我有一个自定义UICollectionViewCell
其中包含许多对象,但总体而言,它需要连接到数据库,抢存储的图像URL和填充UIImageView
通过附加每张照片(照片数量是可选的-从1到10)的UIStackView
。
现在,除了单元格的高度是硬编码的以外,我已经得到了所有东西,所以它不起作用。 我不确定如何获取大小。 这是我的代码。
这是高度被硬编码的地方。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
let width = collectionView.bounds.width
let size = CGSize(width: width, height: 800)
return size
}
这是设置UIImageView
地方。 photoURLs
是从数据库下载的URL的数组。
if let photoURLString = post?.photoURLs
{
for urlString in photoURLString
{
let photoURL = URL(string: urlString)
let imageView = UIImageView()
imageView.sd_setImage(with: photoURL)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.widthAnchor.constraint(equalTo: postImagesStackView.widthAnchor)
postImagesStackView.addArrangedSubview(imageView)
postImagesStackView.layoutIfNeeded()
}
}
另外,如何在每张照片之间留一点空间? 喜欢1点吗?
我认为您需要计算像元高度。 在这种情况下,请在调用重新加载collectionView之前对图像高度求和,或者修复imageView高度,然后将图像计数乘以高度。
另一种解决方案是为每个图像制作单元格。 可以使用section和自定义collectionview布局来代替stackview。
如woosiki所示,您可以尝试仅根据返回的图像大小计算一个值。 获得响应并计算完整高度后,请调用collectionView.reloadData()并为每个后备对象引用该fullHeight属性。 如下所示,不过如果使用let / where和default / max height可以使其更安全。
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout, sizeForItemAt
indexPath: IndexPath) -> CGSize
{
let imageObject = dataSource.items[indexPath.row]
let width = collectionView.bounds.width
let size = CGSize(width: width, height: imageObject.fullHeight)
return size
}
对于边框/间距,如果最终还是包含标题或元数据,或者尝试使用文档示例,则可以包含稍大的父视图。
https://developer.apple.com/documentation/uikit/nslayoutanchor
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.