美文网首页js css html
Cell中重写systemLayoutSizeFittingSi

Cell中重写systemLayoutSizeFittingSi

作者: 梁森的简书 | 来源:发表于2023-01-05 16:50 被阅读0次
    image.png

    之前记录systemLayoutSizeFitting在cell中使用
    由上图可以看出systemLayoutSizeFittingSize方法在UITableView的heightForCell方法之后调用。

    场景1:cell不嵌套UIScrollView(UITableView、UICollectionView)

    cell子视图如果只是一些普通UIView、UILabel、UIButton......,那么重写该方法,获取的size就是cell的正确size。
    \color{red}{特殊情况:}
    有些cell在tableView第一次reload之后无法显示正确的高度,需要再reload一次才会显示正确高度,这时我们需要在systemLayoutSizeFittingSize方法中先调用self的layoutIfNeeded,再使用super调用,以获取cell正确的size。

    场景2:cell嵌套UICollectionView

    先使用super调用,获取cell的size,注意,这里的size高度是不包括collectionView的高度,我们需要再调用collectionView的layoutIfNeeded,获取collectionView的高度,然后得出cell的正确高度,并返回。

    - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority {
        CGSize size = [super systemLayoutSizeFittingSize:targetSize withHorizontalFittingPriority:horizontalFittingPriority verticalFittingPriority:verticalFittingPriority];
        [self.collectionView layoutIfNeeded];
        CGFloat collectionH = self.collectionView.collectionViewLayout.collectionViewContentSize.height;
        CGFloat height = size.height + collectionH;
        return CGSizeMake(size.width, height);
    }
    

    场景3:cell嵌套UITableView

    目前发现使用该方法不能像cell嵌套collectionView那样获取cell的正确高度。

    相关文章

      网友评论

        本文标题:Cell中重写systemLayoutSizeFittingSi

        本文链接:https://www.haomeiwen.com/subject/ztkjcdtx.html