這算是個老生常談的話題了燥滑,從最早的時候使用Frame類來持有模型,然后在這個Frame類中手動計算高度阿逃,到后來的自動計算行高铭拧。下面就來說說我使用Masonry做高度自適應(yīng)遇到的坑吧!
之前做高度自適應(yīng)有幾個注意點:
1恃锉、內(nèi)部控件約束要完整搀菩,不要缺少約束
2、設(shè)置cell的ContentView的約束破托,主要是底部約束等于最下邊的控件的底部肪跋。
即:
// _contentLabel是最底部的控件
[_contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(_icon);
make.top.equalTo(_icon.mas_bottom).offset(10);
make.right.equalTo(self.contentView).offset(-10);
}];
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(_contentLabel);
make.top.equalTo(self);
make.left.equalTo(self);
make.right.equalTo(self);
}];
// 然后再設(shè)置tableView
// 注意這個預(yù)估行高不能為0,且越接近真實行高性能越好
self.estimatedRowHeight = 200;
self.rowHeight = UITableViewAutomaticDimension;
通過上面的設(shè)置之后即可實現(xiàn)cell的高度自適應(yīng)土砂,但是今天我發(fā)現(xiàn)這樣設(shè)置不能自適應(yīng)了州既,開始以為是我代碼寫的有問題,然后把之前的代碼翻出來運行了發(fā)現(xiàn)之前的可以自適應(yīng)萝映,那我感覺這個問題應(yīng)該就出在Masrony這個框架了吴叶,看了看版本確實更新了。當(dāng)前最新版本為1.0.2锌俱。
那更新了怎么解決自適應(yīng)的這個問題呢晤郑,后來想了想如果想用contentView來約束Label不行的話那能不能用Label來約束contentView呢。
[_contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(_icon);
make.top.equalTo(_icon.mas_bottom).offset(10);
make.right.equalTo(self.contentView).offset(-10);
make.bottom.equalTo(self.contentView);//關(guān)鍵代碼
}];
// 神奇了贸宏,居然可以了
好吧造寝,Masrony默默的更新了內(nèi)部實現(xiàn)。不過更新后感覺比之前要合理一些吭练。