iOS tableview的常用delegate和dataSource执行顺序
在這次項目中遇到了一個特別奇葩的問題:表視圖創建的cell在7以上的系統能正常運行顯示,在模擬器上就不能正常實現......為解決這個問題,糾結了好久......
對在7系統上不顯示的猜測:
用masory設置約束不對,導致cell不顯示;
對這個猜測也弄了好久,對一個個控件的約束都好好檢查了一遍,發現實在是沒有錯的...后來迫不得已,自己不用masory,直接用frame約束,發現還是不顯示,這才對masory的問題放棄了....
最后考慮了下:他不是內容不顯示,他是直接這些cell不顯示,有沒有可能是cell的高度問題,通過打斷點,調試,發現確實是cell的高度問題,導致cell的不顯示,知道問題的原因就好辦了:
因為我的cell的高度動態的,我是在cell賦值的時候根據文字的多少計算label的高度,把每個cell的高度存到model里,控制器直接返回cell的高度即可.發現在cell的高度的方法里,cell的高度直接都返回為0了,導致cell的不顯示了.
這時候想到了iOS tableview的常用delegate和dataSource執行順序:
常用的也就是下面幾個方法了:
?
1 #pragma mark - Table view data source 2 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 3 先看有幾個section 默認1個 4 5 #pragma mark - Table view delegate 6 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section; 7 標題頭的高度 8 9 #pragma mark - Table view data source 10 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 11 *******每個section中有多少行cell 12 13 #pragma mark - Table view delegate 14 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 15 ********每個cell的行高 16 17 #pragma mark - Table view data source 18 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 19 *********初始化每個cell的內容 20 21 #pragma mark - Table view delegate 22 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;?
創建表視圖的時候會先調用cell的高度的方法,再創建cell,一開始高度為0,cell當然不顯示啦......
所以,比較傻一點的方法就是在請求到數據的時候計算cell中可變的label的高度,存到model中即可,這樣也是最保險的方法.
雖然...功能實現了..可我還是糾結的問題沒有解決:
為什么在模擬器和7以上的系統上可以正常運行,在7的系統就不行呢????要說高度都為0啊....
有知道的朋友可以回復我喲....我們共同進步,加油!!!
轉載于:https://www.cnblogs.com/pengsi/p/5673385.html
總結
以上是生活随笔為你收集整理的iOS tableview的常用delegate和dataSource执行顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树的链式存储结构--二叉链表
- 下一篇: 字符移位