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