Cell中重寫systemLayoutSizeFittingSize再總結(jié)

image.png

之前記錄systemLayoutSizeFitting在cell中使用
由上圖可以看出systemLayoutSizeFittingSize方法在UITableView的heightForCell方法之后調(diào)用。

場(chǎng)景1:cell不嵌套UIScrollView(UITableView、UICollectionView)

cell子視圖如果只是一些普通UIView、UILabel、UIButton......,那么重寫該方法,獲取的size就是cell的正確size。
\color{red}{特殊情況:}
有些cell在tableView第一次reload之后無法顯示正確的高度,需要再reload一次才會(huì)顯示正確高度,這時(shí)我們需要在systemLayoutSizeFittingSize方法中先調(diào)用self的layoutIfNeeded,再使用super調(diào)用,以獲取cell正確的size。

場(chǎng)景2:cell嵌套UICollectionView

先使用super調(diào)用,獲取cell的size,注意,這里的size高度是不包括collectionView的高度,我們需要再調(diào)用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);
}

場(chǎng)景3:cell嵌套UITableView

目前發(fā)現(xiàn)使用該方法不能像cell嵌套collectionView那樣獲取cell的正確高度。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容