由于歷史原因,項(xiàng)目中只有一個(gè)Controller,有相機(jī)等其他耗性能的功能,其他的頁(yè)面都是以View的形式Add上去,出現(xiàn)了幾個(gè)關(guān)于tableView的UI問題,記錄下可能的情況以及解決方案。
注:以下出現(xiàn)的都是公司項(xiàng)目里出現(xiàn)過的,解決方案可能只適用上述的項(xiàng)目結(jié)構(gòu)中,請(qǐng)讀者自行分辨。
一、tableViewHeader/tableFooterView設(shè)置后出現(xiàn)高度莫名減少64/49
處理方式:
1)先檢查約束是否正確,出現(xiàn)這種特殊偏差往往是約束不對(duì)。如果是frame和autolayout混用則檢查起父控件的autolayout。
2)不要使用tableView.tableFooterView = footerView;的方式換用[tableView setTableFooterView:footerView]調(diào)用。理論上這兩個(gè)是同樣的,實(shí)際使用時(shí)偶現(xiàn)效果不同的情況。
3)在- (void)drawRect:(CGRect)rect中重新設(shè)置Frame
4)在- (void)layoutSubviews中重新設(shè)置Frame
5)使用以下方式直接設(shè)置frame
CGRect frame = self.tableView.tableFooterView.frame;
frame.size.height = 120;
self.tableView.tableFooterView.frame = frame;
6)使用以下方式間接設(shè)置frame
UIView *footerV = [UIView new];
footerV.frame = CGRectMake(0, 0, 120, 120);
self.tableView.tableFooterView = footerV;
7)組合使用上述幾種方案
如在3)中和5)一起使用,3)中和6)一起使用
分析原因:可能都是layout引起的問題,由于項(xiàng)目結(jié)構(gòu)的原因出現(xiàn)了這些高度異常。在普通項(xiàng)目中并沒有出現(xiàn)。
二、其他UI顯示異常
1.Plain模式下出現(xiàn)快速上下滑動(dòng)出現(xiàn)sectionHeader突然卡在屏幕中間
折中處理:改為Groupe模式。
原因分析:可能是項(xiàng)目中出現(xiàn)耗性能的東西導(dǎo)致在計(jì)算section位置出現(xiàn)異常導(dǎo)致,代碼上沒有想到更好的方案,目前折中處理。
2.Group模式下出現(xiàn)header和footer出現(xiàn)了多余的部分
處理方法:在heightForHeader和heightForFooterInSection方法中返回0.01,不要返回0可解決。
原因分析:Group模式下section默認(rèn)是有高度的,設(shè)置為0則會(huì)觸發(fā)顯示默認(rèn)高度。