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