iOS的UITableViewCell高度的自適應(yīng)

? ? ? ? 怎么設(shè)置UITableViewCell高度比較合適?這個(gè)問(wèn)題對(duì)于初學(xué)者來(lái)說(shuō)有時(shí)會(huì)變成大問(wèn)題。大家都知道iOS的列表都是用UITableViewController來(lái)管理的,里面的每個(gè)單元格都是用UITableViewCell來(lái)定義(以下簡(jiǎn)稱為Cell),而且UITableViewController提供設(shè)置Cell高度的方法,就是要實(shí)現(xiàn)代理UITableViewDelegate,這個(gè)代理中有一個(gè)方法可以用來(lái)設(shè)置高度:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath)

? ? ? ? 但是這個(gè)方法設(shè)置Cell的高度有個(gè)很大的問(wèn)題:通過(guò)這個(gè)方法設(shè)置的Cell高度是死的,它不會(huì)根據(jù)Cell中的內(nèi)容變化而靈活的改變高度。例如,Cell中包含一段文字內(nèi)容并且文字的長(zhǎng)度不確定,也就是文字可能3行,也可能5行,明顯5行文字所要要求的高度要明顯大于3行,而固定高度的Cell肯定不能很好的適應(yīng)這種要求。

? ? ? ? 有什么辦法解決這個(gè)問(wèn)題呢?? 其實(shí)iOS早就為我們想好這種需求了,方法很簡(jiǎn)單:Cell中的視圖在高度方向要能形成明確的約束鏈。也就是說(shuō),Cell中所有的視圖設(shè)置約束后,Xcode能夠根據(jù)這些約束計(jì)算出一個(gè)確定的Cell高度。舉個(gè)簡(jiǎn)單的例子,如下圖所示:


? ? ? ? 這個(gè)Cell中包含一個(gè)UILabel視圖和一個(gè)UIButton視圖,那么怎樣才算有一個(gè)明確的約束鏈呢?可以像上圖那樣設(shè)置:UILabel上邊到Cell上邊的距離(100) + UILabel自身高度(25) + UIButton上邊到UILabel下邊的距離(102) + UIButton自身高度(25)+ UIButton下邊到Cell下邊的距離(105)。這樣整個(gè)Cell的高度就可以計(jì)算出來(lái):100+25+102+25+105=357。當(dāng)然,這個(gè)不需要我們?nèi)ニ?,我們只要做好這些約束,系統(tǒng)自動(dòng)會(huì)為我們計(jì)算出來(lái)。其實(shí),帶文字的視圖本身的高度我們不需要理會(huì),在這里為了說(shuō)明問(wèn)題,我們把文字高度設(shè)置為25,帶文字的視圖我們都不應(yīng)該設(shè)置固定高度,我們不理會(huì)就好了,因?yàn)槲淖謨?nèi)容以及字體大小等確定之后Xcode會(huì)自己計(jì)算視圖的高度。

? ? ? ? 當(dāng)然,設(shè)置約束的原則是讓Xcode知道Cell的總高度就好了,只要約束不沖突就可以了。因此,也可以像下圖這樣設(shè)置。只要UILabel視圖的下邊到Cell的下邊的距離足夠放下一個(gè)UIButton視圖就OK了,至于UIButton怎么約束已經(jīng)不重要了,因?yàn)檫@樣約束Xcode足以計(jì)算出整個(gè)Cell的高度了。

? ? ? ? 有問(wèn)題可以留言回復(fù)或者加我微信:1914532832,并備注:iOS開(kāi)發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,235評(píng)論 3 119
  • 暑假里, 我在家里找彈弓,想去打靶子。 我在家里找了個(gè)遍,誰(shuí)知,我的彈弓不見(jiàn)了 。我找遍了都沒(méi)有,我從那個(gè)柜頂上看...
    方浩成閱讀 251評(píng)論 0 1
  • 距離2014年9月17日已經(jīng)兩年多了。距離2016年10月20日已經(jīng)五個(gè)多月了。 校園里的櫻花開(kāi)滿...
    morlboro閱讀 400評(píng)論 0 2
  • 在朋友圈,無(wú)意間看到,你來(lái)了我的城市。心里有種莫名的傷感。 我們分開(kāi)十幾年了,從來(lái)沒(méi)有再遇見(jiàn)過(guò)。 當(dāng)年,目送你決然...
    曉風(fēng)寒月aa閱讀 1,078評(píng)論 19 22

友情鏈接更多精彩內(nèi)容