前言
在寫這篇文章之前峻呕,我將本文集(iOS開發(fā)中的坑)里的一些文章進(jìn)行了調(diào)整利职,移至iOS開發(fā)文集當(dāng)中。目的瘦癌,就是為了進(jìn)行一種區(qū)分猪贪,讓本文集從今往后,成為一種專門記錄一些不常見的iOS開發(fā)中的坑讯私,的存在热押。
本文集中的文章中記錄下來的坑都屬于不常見的那種西傀,很多人可能永遠(yuǎn)都不會遇到,但是當(dāng)你遇到時桶癣,往往很難在網(wǎng)上找到相關(guān)記錄拥褂。
正文
UITableView可以說是iOS開發(fā)中最常用到的幾種UI控件之一,相信很多人都用過不知道多少次牙寞。今天就來說一說UITableView中那些不常見的大坑饺鹃。
1.UITableView在RegisterUITableViewCell之前崩潰的坑。
光看標(biāo)題可能很多人不是很明白间雀,所以我就直接上代碼悔详。
看完上圖代碼,我們的第一個問題就來啦,請問上圖代碼運(yùn)行之后连锯,控制臺的輸出順序是什么归苍?
雖然答對了上面的問題霜医,但是還請不要驕傲,因為我們的重頭戲來了驳规。
下面宣布答案医男,可能和你的猜測有些出入。
**結(jié)論:在為tableView設(shè)置了tableFooterView和tableHeaderView之后镀梭,如果調(diào)用tableView.separatorStyle方法,系統(tǒng)就會自動調(diào)用UITableViewDataSource代理的代理方法踱启。如果對這個不了解报账,可能就會造成各種問題。不過這個問題在iOS10已經(jīng)解決埠偿,不再出現(xiàn)透罢。我想應(yīng)該是個官方BUG。
最后冠蒋,本次實驗的運(yùn)行環(huán)境為iOS8.4的虛擬機(jī)羽圃,由于條件簡陋,我沒有測試其他的iOS版本抖剿。**
2.UITableView第0個sectionHeaderView不顯示的問題
得到如下結(jié)果:
可以清楚的看出朽寞,第一個section的headerView沒有顯現(xiàn)识窿。如果在代理里進(jìn)行打印,會發(fā)現(xiàn)根本沒有走sectionHeaderView的第0個section的代理脑融。
這個情況很奇怪喻频。我們稍微修改一下代碼,再運(yùn)行一下試試吨掌。
運(yùn)行結(jié)果如下:
真是神奇澳に巍!A夺!秋茫!
由上圖的代碼對比可知,造成這種結(jié)果的原因便是sectionHeaderView的高度實現(xiàn)的方式不同乃秀。用self.tableView.sectionHeaderHeight設(shè)置高度就會丟失第0gesection的headerView肛著,而通過代理就不會。
我們看一下sectionHeaderHeight的介紹跺讯,發(fā)現(xiàn)只有代理不實現(xiàn)的時候枢贿,才會用sectionHeaderHeight,按照常理來說這兩者在設(shè)置統(tǒng)一高度時刀脏,應(yīng)該沒有差別局荚。所以這種情況的出現(xiàn)實在讓人費(fèi)解。
結(jié)論:這個實驗還有一部分我沒有放出愈污,所以我就直接給出結(jié)論耀态。只有當(dāng)tableView是Grouped,并且section的高度是通過sectionHeaderHeight設(shè)置的時候暂雹,第0個section的headerView才會丟失首装。如果tableView是Plain就不會有任何問題。
3.UITableViewHeaderFooterView不能當(dāng)作普通的UIView來用杭跪,因為UITableViewHeaderFooterView中有很多約束條件仙逻,所以不能用來當(dāng)作普通的UIView。