小编Per*_*mat的帖子

在UITableViewCell中使用包含带异步图像加载的UICollectionView的自动布局

TL; DR:第一次显示包含集合视图的单元格时autolayout引擎计算的高度总是错误的.调用reloadData()表视图可以解决问题,但也会使表视图跳转并无法使用.任何的想法?

解释:我有一个表视图,其中包含许多不同高度的不同单元格.

其中一个单元格是一个图像库,可以包含一个或多个异步加载的图像.

我有的限制如下:

  • 如果图库仅包含一个图像,并且此图像以横向方向定向,则图库的高度应为图像的高度
  • 否则,画廊有一个固定的高度.

我面临的问题如下:

  • 当表视图第一次尝试显示图库单元格时,我收到了Super Annoying Encapsulated-Height-Layout问题.即使已更新集合视图上的高度约束,此封装高度始终具有错误值.

  • 表格视图在第一次尝试时始终无法正确获取单元格的大小.

    • 即使在显示单元格时已经检索到图像,单元格也显示不佳,我必须向上/向下滚动以隐藏它,然后再次显示它以获得正确的大小...直到下一次单元格大小必须是再次计算.见下文: 在此输入图像描述
  • 我可以强制表视图正确显示单元格的唯一方法是在第一次加载图像时在表视图上调用reloadData ...这使得表视图跳转并基本上无法使用.

我正在使用Kingfisher来检索图像,这里是代码:

UICollectionViewCell数据源:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CarouselCollectionViewCell", forIndexPath: indexPath) as! CarouselCollectionViewCell
    guard let collectionView = collectionView as? CarouselCollectionView else { return cell }

    if let imagesURLs = data.imagesURLs {
        let url = imagesURLs[indexPath.item]

        if let smallURL = url.small {
            KingfisherManager.sharedManager.retrieveImageWithURL(
                smallURL,
                optionsInfo: KingfisherOptionsInfo(),
                progressBlock: nil,
                completionHandler: { (image, error, cacheType, imageURL) -> () …
Run Code Online (Sandbox Code Playgroud)

uitableview ios uicollectionview swift ios-autolayout

6
推荐指数
1
解决办法
1225
查看次数