iOS開發之tableHeaderView的那些坑

來源:互聯網
上載者:User
 
前言: 

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;


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.