回想一下,遇到過(guò)的tableViewCell高度計(jì)算的有多少種?
(個(gè)人認(rèn)為)最簡(jiǎn)單粗暴的是,使用MVVM模式,
- 在對(duì)應(yīng)的ViewModel中添加你需要的高度屬性.
- 在請(qǐng)求完成網(wǎng)絡(luò)數(shù)據(jù)之后,在ViewModel中計(jì)算對(duì)應(yīng)控件所需要的高度內(nèi)容.
- 直接使用ViewModel中的數(shù)據(jù)對(duì)Cell進(jìn)行高度賦值.
這種方式通過(guò)純代碼操作.可操作性強(qiáng).缺點(diǎn)是, 耗時(shí),代碼看起來(lái)臃腫.
用XIB的方式動(dòng)態(tài)計(jì)算Cell高度.
在探究FDTemplateLayoutCell的時(shí)候自己也簡(jiǎn)單寫(xiě)了個(gè)Demo : Demo.
最開(kāi)始的時(shí)候以為FDTemplateLayoutCell中有特別的計(jì)算方式,后來(lái)發(fā)現(xiàn)其實(shí)是沒(méi)有的. 預(yù)先通過(guò)Xib的自動(dòng)布局設(shè)置好對(duì)應(yīng)的高度屬性.
1.準(zhǔn)備數(shù)據(jù)源
ps : 圖片資源自己準(zhǔn)備就好,放在Assets.xcassets
2.獲取數(shù)據(jù)源&創(chuàng)建TableView
3.設(shè)置模型
4.自定義Cell.Xib
5.注意點(diǎn)
總結(jié) :
主要高度控制在Xib的自動(dòng)布局中.
- imageView中,設(shè)置了一個(gè)placeholder尺寸,右邊邊距>= 你需要的值
- 最底部Label. 垂直高度內(nèi)容優(yōu)先級(jí)調(diào)低,也就是當(dāng)其他所有人設(shè)置好多有的內(nèi)容之后,在考慮自己.也就是考慮Cell的最終高度了.
- 注意Label的lines設(shè)置為0.
效果圖 :
最后 :
你會(huì)發(fā)現(xiàn), 實(shí)際并沒(méi)有進(jìn)行任何的cell的高度計(jì)算,也沒(méi)用其他第三方框架,同樣實(shí)現(xiàn)了高度自適應(yīng)的效果.
- 是不是瞬間覺(jué)得MVVM的方式,是有需要寫(xiě)多少的代碼,是有多麻煩.
- 是不是瞬間覺(jué)得Xib的動(dòng)態(tài)高度計(jì)算是有多方便.
Xib的動(dòng)態(tài)高度計(jì)算 : 其實(shí)也有個(gè)弊端就是,后續(xù)迭代修改的時(shí)候,一堆的Constraints,改起來(lái)是多不順心.
那為什么還要使用 FDTemplateLayoutCell ?
回到前面所說(shuō)的,最開(kāi)始的時(shí)候以為FDTemplateLayoutCell中有特別的計(jì)算方式,后來(lái)發(fā)現(xiàn)其實(shí)是沒(méi)有的. 預(yù)先通過(guò)Xib的自動(dòng)布局設(shè)置好對(duì)應(yīng)的高度屬性.
FDTemplateLayoutCell 主要做的事情是,性能方面的優(yōu)化.
優(yōu)化UITableViewCell高度計(jì)算的那些事 里有指出為什么使用
"究竟有沒(méi)有既能省去算高煩惱宁仔,又能保證順暢的滑動(dòng)寒亥,還能支持 iOS6+ 的一站式解決方案呢棺牧?"