1. 程式人生 > >Masonry自動計算cell行高:HYBMasonryAutoCellHeight

Masonry自動計算cell行高:HYBMasonryAutoCellHeight

前言

還在手動計算UITableViewCell的行高嗎?還在每次都因為需求變化一點就要大量調整cell的高度而煩惱嗎?現在教大家如何通過Masonry的自動佈局來實現自動計算cell的行高!!!

github沒有找到基於Masonry自動計算行高的庫,倒是找到了使用xib/storyboard在新增約束來自動計算行高的庫,如: UITableView-FDTemplateLayoutCell

本人非常推崇Masonry來實現程式碼的自動佈局,因此專案中都是使用Masonry佈局的,為了自動計算行高,決定寫一個擴充套件,以達到自動計算的效果,如此一來,開發者不用再關心那些非固定行高的cell

的動態計算問題了。

設定關鍵依賴

要想自動計算出cell的行高,我們還需要指定以哪個檢視作為cell的最後一個檢視,比如我們最後要新增一條線,我們可以以這條線作為hyb_lastViewInCell,如果這條線還需要距離底部一定距離,那麼可以設定hyb_bottomOffsetToCell

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** * 必傳設定的屬性,也就是在cell中的contentView內最後一個檢視,用於計算行高
* 例如,建立了一個按鈕button作為在cell中放到最後一個位置,則設定為:self.hyb_lastVieInCell = button; * 即可。 * 預設為nil,如果在計算時,值為nil,會crash */ @property(nonatomic,strong)UIView*hyb_lastViewInCell; /** * 可選設定的屬性,預設為0,表示指定的hyb_lastViewInCell到cell的bottom的距離 * 預設為0.0 */ @property(nonatomic,assign)CGFloat
hyb_bottomOffsetToCell;

計算行高API

要計算行高,只需要在UITableView的計算行高的代理方法中呼叫此API即可:

1 2 3 4 5 6 7 8 9 10 11 /** * 通過此方法來計算行高,需要在config中呼叫配置資料的API * * @param indexPath 必傳,對應的indexPath * @param confi     必須要實現,且需要呼叫配置資料的API * * @return 計算的行高 */ +(CGFloat)hyb_heightForIndexPath:(NSIndexPath*)indexPath config:(HYBCellBlock)config;

在呼叫時,config傳回來了cell物件,需要在呼叫處呼叫方法來配置好資料,才能正確地計算出cell的行高。通常是這樣呼叫的:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -(CGFloat)tableView:(nonnull UITableView*)tableView heightForRowAtIndexPath:(nonnull NSIndexPath*)indexPath{ HYBNewsModel*model=nil; if(indexPath.row<self.dataSource.count){