OC UI總結之--tableview相關用法和問題

weixin_33912445發表於2016-12-19

1. 去除某個tableviewCell的分割線

有時候部分tableviewCell不需要分割線,有些需要,這個時候可以給指定類的cell

-(void)addSubview:(UIView *)view{
    if (![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]] && view) {
        [super addSubview:view];
    }
}

2. viewForHeaderInSection 的section從1開始而不是從0開始

使用 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 時發現section是從1開始而不是從0,最後檢視API的時候發現原文中說道:

This method only works correctly when tableView:heightForHeaderInSection: is also implemented.這個方法只有當tableView:heightForHeaderInSection:實現的時候才能正確執行。

好吧,確實是一個天坑,謹記了。。。。

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 44;
}

就好了

3. tableView設定UITableViewStyleGrouped頂部有空餘高度

tableView 有兩種UITableViewStyle :

  • UITableViewStylePlain 普通(預設值)
  • UITableViewStyleGrouped 分組
    預設情況下plain時第一行cell的上邊界是和導航條(螢幕頂端)緊貼著的。如果你改成了grouped的話,就會有一個預設的間隙,這個間隙是scrollView(tableview也是一種)在導航欄下的自動縮排---個人理解,如果不對請指正。

我嘗試過如下方法:

  • 設定一個空的tableviewheader: 不行
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
  • 設定第一個section的sectionHeader/FooterHeight 為0.01(iOS中設定為0相當於沒設定!)也不行

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return  0.01;
}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 0.01;
}

最終還是用設定contentInset收拾了

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);

目前還沒弄明白為啥會這樣,先放在這裡做個筆記,以後好用。。。。,如果哪位知道請告知我一下,多謝。。。

相關文章