1.設置collectionView的高度
1.1為什么要設置高度?
collectionView是在tableView的footView里面 , tableView能滾動,collectionView也能滾動 我們不想讓collectionView滾動
1.2怎么可以讓collectionView不滾動?
只要collectionView里面的內容不超出collectionView的最大高度就可以了
1.3怎么設置collectionView的高度
計算出collectionView內容高度 = collectionView的高度
1.4怎么計算collectionView內容的高度
設置collectionView高度 = 內容高度(rowsitemWH + (rows - 1) margin)
總行數 cell的高度 + (總行數 - 1) *行間距
1.5怎么計算總行數
計算總行數:(count - 1) / cols + 1 萬能公式 記住
(模型的總數 - 1) / 每一行有多少個cell(item) + 1
1.6代碼寫到哪里?
計算高度,我們先要拿到模型總數 代碼寫在字典轉模型后面就可以 字典轉模型一般寫在網絡請求成功回調的方法里面
還要寫在刷新表格之前
2.設置tableView的滾動范圍
2.1.為什么要設置滾動范圍
collectionView的高度超出屏幕,我們滾動tableView查看下面的collectionViewcell 發現會彈回來
2.2.為什么會彈回來
tableView的高度會根據最后一個cell或footView的最大y值決定
footView的高度就是就是collectionView的高度,我們設置的collectionView的高度為200
上面雖然重新設置了collectionView的高度,但是在tableFooterView高度已經在設置為200的時候確定為200了
2.3.怎么修改滾動范圍?
先用contentSize來設置 只要設置tableView的最大高度為collectionView內容的最大y值即可
修改后發現一個bug 當離開當前頁 再返回的時候,滾動tableView 發現還會彈回來2.4.為什么還會彈回來?tableView的滾動范圍是有系統自己設定的,我們設定的值系統不認可,不會記錄,只有第一次會執行我們設置的
再次來到該界面系統就會還原自己記錄的滾動范圍contentSize
2.4.系統怎么設定contentSize
是根據最后一個cell或footView的最大y值決定
2.5.怎么解決彈回來的問題
我們重新設置最后一個cell或footView就可以 系統就會重新計算滾動范圍
2.6.在哪設置?
首先需要拿到collectionView的frame 在網絡請求成功后我們會重新計算collectionView的高度 寫在計算的后面
還要寫在刷新表格之前
3.處理額外的格子
3.1 為什么要處理?
服務器返回的數據不一定是列數的整數倍 這樣最后一行可能只顯示1個cell 后面還有一些缺口 不太美觀 需要處理
3.2 怎么處理?
如果有缺口,我們只需要在缺口位置展示空的cell就可以了
3.3 怎么展示空的cell
cell的個數由模型的個數決定 , 模型的個數由模型數組元素個數(count)決定
我們只需要給模型數組添加元素(object)就可以了
3.4代碼寫到哪里?
我們先要拿到模型總數 代碼寫在字典轉模型后面就可以 字典轉模型一般寫在網絡請求成功回調的方法里面
還要寫在刷新表格之前
4.處理tableView靜態cell的間距
4.1間距是什么造成的?
我們的tableView的是分組樣式的
分組樣式tableView:默認每一組都有間距 我們猜測間距就是分組的間距
4.2怎么驗證?
把分組間距設置為0來查看界面驗證 發現我們的猜測是正確的
然后把分組間距設置成我們想要的間距就可以了
self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 10;
4.3我們發現設置完分組間距,第一個cell距離頂部還是有一大斷間距, 這個間距怎么造成的?
cell距離頂部有一段間距 只有在靜態cell里面才會有這種現象
猜測是內邊距 contentInset
4.4怎么驗證?
打印contentInset
4.5在哪里打印?
在viewDidLoad里面不可以 View里面控件的位置尺寸還沒設置
我們可以在viewDidAppear里面打印 打印完發現是64 不是這個間距
猜測是cell的y值
4.6怎么驗證?
打印cell的frame
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%@",NSStringFromCGRect(cell.frame));
}
我們發現y值為35 ,證明猜測是正確的
4.7怎么修改?直接修改y值?
不可以 修改一個cell的y值只會改變一個cell的位置
4.8怎么可以讓整個tableView里面的cell整體往上(往下)移動
可以通過contentInset
self.tableView.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);
4.9根據上面的設置我們發現系統修改contentInset 是在我們原來的contentInset的基礎上類加得出來的