標籤:img 顯示 改變 tab 代理 應該 計算 ios ui height
背景:這幾天做項目,又遇到了cell的自適應高度問題
首先我們必須要知道UITableViewcell 的代理執行順序,在iOS7出現了一個代理方法叫:tableView: estimatedHeightForRowAtIndexPath:,首先我們要知道在使用UITableViewcell的時候必須計算cell的高度,那如果cell的內容是動態呢?這個時候我們就必須動態返回高度了,這就回到了我們項目中遇到的問題。知道了這一點,接下來我們就必須知道UITableViewde 的代理方法的執行順序,分別如:
可以看到在執行cellForRowAtIndexPath之前是會先執行heightForRowAtIndexPath的,也就是說有可能cell不存在的時候就調用了heightForRowAtIndexPath,這樣是無法滿足項目要求的,直到iOS7出現的新的API,這就是上面講的:tableView: estimatedHeightForRowAtIndexPath:,這個代理方法回給cell的一個預估高度,如果實現了這個方法,也就意味著UITableView的代理方法的執行順序的改變,如:
稍微整理一下就會得到如下結論:
- 首先tableView會先向代理拿得到每個cell的預估高度(estimatedHeightForRow...方法),並且拿這個高度去計算整個tableView應該顯示的範圍
- 根據每行預估的高度,算出一屏顯示的cell的個數,並先對這些cell(調用cellForRow...方法)進行繪製
- 在繪製時拿到cell的真實高度,然後放在heightForRow...方法裡面拿給tabelView去用
- 螢幕滾動(有cell進入螢幕)的時候,仍然會調用繪製以及擷取真實高度的方法.
簡單點說,就是預估高度用來讓tableView心裡有個底,把cell先繪製出來,但最後實際的cell高度還是會從heightForRow...方法中擷取.
參考文獻:
文/CoderAO(簡書作者)
原文連結:http://www.jianshu.com/p/6ab92579fcf1
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。
iOS UITableview的cell自適應