我覺得作為一個iOS開發(fā)肯定遇到過一個問題,使用tableView的HeadView,這個控件是很好用的,因為他讓我們很輕松的分出復(fù)雜的控件和下面的cell的寫法分開。
但是這個控件有坑,只要是你想啊,他在一個tableView的頭部,然后如果他不是一個高度變化的固定View還好,你只需要在加載的時候把HeadView里面的子控件添加進去,然后設(shè)定死他的高度就好了,可是,問題是他如果是一個高度變化的呢??
好吧各位大牛都在笑我了,坑比,這都好意思寫出來??好吧,但是本著裝逼的需要還是貼出來吧,主要是為了不讓簡書空著,所以高手勿噴。
言歸正傳,怎么解決?他其實是因為你每次動態(tài)的改變headView的高度的時候,但是TableView已經(jīng)加載好了,所以HeadView的高度變換了,但是tableView不知道,所以你的頭部就遮擋住cell了,所以這個時候每當你改變以后,再一次的通知tableView 就好了,也就是每一次改變以后重新調(diào)取屬性。
self.backTableView.tableHeaderView? = HeadView ;
好吧,被我的標題吸引進來的給位觀眾老爺就該說了,我去,能在坑點么?這個誰都知道,但是問題在于,現(xiàn)在為了適配比較多的使用了AutoLayOut。這個確實是個神器,有了它再也不用滿腦子的想Frame了,但是如果你用這個來約束你的控件,然后你寫了以這個self.backTableView.tableHeaderView? = HeadView ;方法發(fā)現(xiàn)然并卵,其實主要是,這個約束是在繪制的時候才會繪制出來控件的位置和寬高,所以你直接用這個方法沒有,
然后iOS就有一個更牛逼的東西,,,
?layoutIfNeeded 這個方法能夠在View沒有繪制之前就能計算位置和寬高,所以這個問題的解決方法就是在寫上面的賦值方法之前讓他先繪制一下,
[HeadView layoutIfNeeded];
self.backTableView.tableHeaderView? = HeadView ;
這個方法同樣適用于很多約束的控件的寬高不能計算的地方,
好了,完了,第一篇小文章就這么出了,謝謝點贊,鼓勵一下新的寫手,,啊哈哈,