前言:
tableView 有個屬性叫tableHeaderView 用它我們可以做很多事情 在tableView的頭部加上自訂的view 隨著tableView一起滾動
常用的就是輪播圖比如這樣 DAD90DE4-84E9-4194-9554-40956AD01E32.png
tableView 的tableHeaderView 有兩種建立方式一中是代碼建立另外一種是用xib建立 用代碼建立
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 200)]; // 設定header self.tableView.tableHeaderView = header;
因為 self.tableView.tableHeaderView的高度是沒有辦法設定的,所以必須設定自訂View的高度 來達到設定 self.tableView.tableHeaderView的高度
用xib建立
BBSTableHeaderView * cell = [BBSTableHeaderView tableHeaderView];cell = 291;self.tableView.tableHeaderView = header;
按理來說這樣設定肯定是沒有問題的 但是這時候你設定的高度是不準確的 而且是沒有辦法適配機型的 所以這樣的設定發放不可行 然後這裡有個小tips 很簡單 但是如果你想不到的話 你可能在這個高度問題上調試一整天 比如說我
- 解決方案
UIView * header = [[UIView alloc]init]; header.backgroundColor = [UIColor whiteColor]; BBSTableHeaderView * cell = [BBSTableHeaderView tableHeaderView]; cell.backgroundColor = [UIColor clearColor]; [header addSubview:cell]; header.height = 291; self.tableView.tableHeaderView = header;
原理 就是在xib View下面在加一層View (代碼建立的) 這樣才能保證你設定的高度是準確的 因為Xib高度 準確 必須再加一層代碼建立的view才能保證你的View的高度是準確的 而且是適配各種機型的
其他 tableView 的頂部會由於設定tableHeaderView而變得 有一片空白
解決方案如下:
//在控制器裡面viewDidLoad 寫下這句代碼應該就可以了self.automaticallyAdjustsScrollViewInsets = NO;/** 座標:以螢幕左上方為原點(iOS7以前在狀態列或者導航條下)2.UIScrollView(包括其子類,比如UITableView):會自動在頂部和底部預留一些空白(因為滾動經過半透明導航條或者tabbar下面,需要能隱約看到的效果),是否預留空白可以由UIViewController的automaticallyAdjustsScrollViewInsets的這個屬性控制(預設YES,表示預留空白)。上面這些只要你用iOS開發,就能發現。一個控制器中,出現UIScrollView(包括其子類),必須是第一個添加到控制器的視圖上才會預留空白,這裡的第一個是相對於所有的子視圖,不僅僅是其他UIScrollView(包括其子類)。 那麼我遇到的問題如何解決呢,還是這個屬性automaticallyAdjustsScrollViewInsets,仔細看它的文檔說明,它說了,如果一個控制器中出現兩個以上的UIScrollView(包括其子類),這個屬性需要設定為NO.即不會預留空白,那麼這個控制器中所有的UIScrollView(包括其子類)都需要重新設定座標*/
有的時候上面這種方法設定是沒有用的 所以如果上面這種方法沒有用很有可能是建立tableView的時候用的分組樣式,
解決方案如下
注意:不要寫0 要寫一個比較小的數字 別問為什麼 因為設定0 沒有效果
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0.01;}- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 0.01;}
如果你還有其他的需求比如怎麼隱藏 self.tableView.tableHeaderView 或者比如怎麼改變self.tableView.tableHeaderView的高度看下面
//顯示headerView[self.tableView.tableHeaderView setHidden:NO];//隱藏headerView [self.tableView.tableHeaderView setHidden:YES];
//這樣設定是沒有用的 不信你可以試試 始終為0self.tableView.tableHeaderView.height = xxx;//應該這麼設定UIView *tableHeaderView = _tableView.tableHeaderView;tableHeaderView.height = 0.01;[_tableView setTableHeaderView:tableHeaderView];//如果你要設定tableHeaderView.height = 0;//這樣是沒有效果的 而且tableView的頂部又會多處一片空白 一定要設定一個比較小的值 當然這個值並不是0;