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