前言:
tableView 有個屬性叫tableHeaderView 用它我們可以做很多事情
在tableView的頭部加上自定義的view 隨著tableView一起滾動
常用的就是輪播圖比如這樣
DAD90DE4-84E9-4194-9554-40956AD01E32.png
tableView 的tableHeaderView 有兩種創(chuàng)建方式一中是代碼創(chuàng)建另外一種是用xib創(chuàng)建
用代碼創(chuàng)建
UIView*header = [[UIViewalloc] initWithFrame:CGRectMake(0,0,self.view.width,200)];// 設(shè)置headerself.tableView.tableHeaderView = header;
因為 self.tableView.tableHeaderView的高度是沒有辦法設(shè)置的,所以必須設(shè)置自定義View的高度 來達到設(shè)置 self.tableView.tableHeaderView的高度
用xib創(chuàng)建
BBSTableHeaderView * cell = [BBSTableHeaderView tableHeaderView];cell =291;self.tableView.tableHeaderView = header;
按理來說這樣設(shè)置肯定是沒有問題的 但是這時候你設(shè)置的高度是不準確的 而且是沒有辦法適配機型的
所以這樣的設(shè)置發(fā)放不可行
然后這里有個小tips? 很簡單? 但是如果你想不到的話 你可能在這個高度問題上調(diào)試一整天 比如說我
- 解決方案
UIView* header = [[UIViewalloc]init];? ? header.backgroundColor = [UIColorwhiteColor];? ? BBSTableHeaderView * cell = [BBSTableHeaderView tableHeaderView];? ? cell.backgroundColor = [UIColorclearColor];? ? [header addSubview:cell];? ? header.height =291;self.tableView.tableHeaderView = header;
原理 就是在xib View下面在加一層View (代碼創(chuàng)建的) 這樣才能保證你設(shè)置的高度是準確的 因為Xib高度 準確 必須再加一層代碼創(chuàng)建的view才能保證你的View的高度是準確的 而且是適配各種機型的
其他
tableView 的頂部會由于設(shè)置tableHeaderView而變得 有一片空白
解決方案如下:
//在控制器里面viewDidLoad 寫下這句代碼應(yīng)該就可以了self.automaticallyAdjustsScrollViewInsets =NO;/*
* 坐標:以屏幕左上角為原點(iOS7以前在狀態(tài)欄或者導航條下)
2.UIScrollView(包括其子類我抠,比如UITableView):會自動在頂部和底部預留一些空白(因為滾動經(jīng)過半透明導航條或者tabbar下面玄组,需要能隱約看到的效果),是否預留空白可以由UIViewController的
automaticallyAdjustsScrollViewInsets的這個屬性控制(默認YES,表示預留空白)旬渠。
上面這些只要你用iOS開發(fā),就能發(fā)現(xiàn)箭窜。
一個控制器中,出現(xiàn)UIScrollView(包括其子類)矫废,必須是第一個添加到控制器的視圖上才會預留空白,這里的第一個是相對于所有的子視圖砰蠢,不僅僅是其他UIScrollView(包括其子類)蓖扑。
那么我遇到的問題如何解決呢,還是這個屬性automaticallyAdjustsScrollViewInsets娩脾,仔細看它的文檔說明赵誓,它說了,如果一個控制器中出現(xiàn)兩個以上的UIScrollView(包括其子類)柿赊,這個屬性需要設(shè)置為NO.即不會預留空白,那么這個控制器中所有的UIScrollView(包括其子類)都需要重新設(shè)置坐標
*/
有的時候上面這種方法設(shè)置是沒有用的 所以如果上面這種方法沒有用很有可能是創(chuàng)建tableView的時候用的分組樣式,
解決方法如下
注意:不要寫0 要寫一個比較小的數(shù)字 別問為什么? 因為設(shè)置0 沒有效果
- (CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section{return0.01;}- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section{return0.01;}
如果你還有其他的需求比如怎么隱藏 self.tableView.tableHeaderView 或者比如怎么改變self.tableView.tableHeaderView的高度看下面
//顯示headerView[self.tableView.tableHeaderView setHidden:NO];//隱藏headerView[self.tableView.tableHeaderView setHidden:YES];
//這樣設(shè)置是沒有用的 不信你可以試試 始終為0self.tableView.tableHeaderView.height = xxx;//應(yīng)該這么設(shè)置UIView*tableHeaderView = _tableView.tableHeaderView;tableHeaderView.height =0.01;[_tableView setTableHeaderView:tableHeaderView];//如果你要設(shè)置tableHeaderView.height =0;//這樣是沒有效果的 而且tableView的頂部又會多處一片空白? 一定要設(shè)置一個比較小的值 當然這個值并不是0;
寫在末尾
以上內(nèi)容是自己在開發(fā)中遇到過得問題 以及自己的解決方案 寫在這里 是想讓更多人知道這里的坑? 以免在這個小問題上耽誤大家的時間.
最后如果這篇文章對你有用? 請給我一個贊 作為鼓勵 謝謝~
作者:七里田間的守望者
鏈接:http://www.reibang.com/p/27114cce7c75
來源:簡書
著作權(quán)歸作者所有幻枉。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)碰声,非商業(yè)轉(zhuǎn)載請注明出處。