可展開的UITableViewCell

在日常構(gòu)建UI過程中,我們會遇到很多實用TableView的機會。又有很多時候,會遇到需要自定義適配cell高度的時候,但也有些UI設(shè)計需要我們在展示的時候,只需要展示部分?jǐn)?shù)據(jù),只有在用戶進行某一項Action的時候才會展示完整的數(shù)據(jù)。

1、前提

在Storyboard和xib的使用中,有一個很有用的東西,叫做autoLayout自動布局,就是說在構(gòu)建Cell的時候,只要將布局的約束寫好,將Cell的上下約束撐起來,當(dāng)UILabel自動換行的時候,會將Cell的height自適應(yīng)到合適的大小。
當(dāng)然,使用是有前提的:

self.tableView.estimatedRowHeight = rowHeight; 
self.tableView.rowHeight = UITableViewAutomaticDimension;

UITableViewAutomaticDimension

使用自動布局之前,需要將tableview的高度進行設(shè)置為自動布局高度,然后需要設(shè)置一個預(yù)設(shè)高度,這樣之后才會根據(jù)內(nèi)部數(shù)據(jù),將Cell的高度撐起來。

2、實現(xiàn)邏輯

1、進入Tableview的時候,對于UILabel的NSLayoutConstraint要設(shè)置成一個定值,然后在點擊擴展Button 的時候,將label.text的值經(jīng)過計算之后,得出與之相適應(yīng)的高度,然后賦值給UILabel的NSLayoutConstraint,刷新這個Cell。
2、當(dāng)擴展之后,點擊Button需要將UILabel的NSLayoutConstraint設(shè)置成默認(rèn)的初始高度,并刷新Cell.
3、當(dāng)label.text的文字不需要擴展的時候,需要對擴展Button做隱藏處理。
4、需要知道當(dāng)前Cell是否已經(jīng)展開的狀態(tài),這個需要用數(shù)組儲存。

3、部分代碼解析

3.1TableveiwCell部分

TableveiwCell接口

每一個button點擊需要一個Delegate,用來向controller傳遞點擊事件以及點擊cell的信息。
showStr

這個接口用來接收賦值給lbShowTextstring,至于為什么沒有直接用label.text,下面會簡單說說。
showStr的set方法

有些字符串很短的情況下,就不需要擴展,所以需要隱藏button,所以在這里重寫了showStr的set方法。

3.2TableveiwController部分

回調(diào)函數(shù)在Controller的處理

self.expandStatus這二個數(shù)組就是用來儲存是否已經(jīng)擴展的狀態(tài),每一次點擊button之后,需要根據(jù)狀態(tài)替換數(shù)組元素。

4、可能遇到的問題

解決刷新單個cell之后,CGFloat變化的問題

也是之前的一個項目發(fā)現(xiàn)的這個問題,在刷新Cell的時候,有時候會遇到tableview的CGFloat會發(fā)生改變,就是說,tableview會滑動。
所以在翻遍StackOverFlow之后,自己總結(jié)了這么一個辦法,有效,可用!

抓取的log

當(dāng)我抓取log的時候會給我這些信息,大概意思就是某幾個Constraint出現(xiàn)了問題,我的解決方案是修改某一個約束的priority來解決問題。

代碼基本功能實現(xiàn),但是代碼邏輯上肯定還有優(yōu)化的余地,后面我會繼續(xù)優(yōu)化我的這部分代碼,如有問題,請各位指正。點擊進入Github

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,246評論 4 61
  • 每個人都有兩個自己,一個暴露在陽光下,擁有著純粹自然的微笑,一個隱藏在黑暗里,保留著冷漠自我的模樣。 禾子有著大大...
    禾木子閱讀 1,057評論 0 1
  • 星動欣醇閱讀 212評論 0 3
  • //自定義導(dǎo)航欄多個右按鈕 UIButton* myCollectionButton = [[UIButton a...
    奕珃閱讀 607評論 0 1
  • 這兩天一直在聽李善友教授的講課,同時在看自己的優(yōu)勢報告和行動計劃,反思到自己之前的思維方式和學(xué)習(xí)方式出現(xiàn)了非常大的...
    胡泉_hq閱讀 115評論 0 6