viewForHeaderInSection - 没有标题返回什么?

时间:2014-02-13 20:27:44

标签: ios objective-c uitableview

我有UIViewController,其中嵌入了多个UITableView。对于某些表,我需要显示带有多个标签的自定义标题视图。对于其他表格,我根本不想显示标题(也就是说,我希望myTable2中的第一个单元格位于myTable2的框架顶部。这里大致有我的意思:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (tableView == self.myTable1)
    // Wants Custom Header
    {        
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.contentSize.width,20);

        // ... Do stuff to customize view ...

        return view;
    }
    elseIf (tableView == self.myTable2)
    // Wants No header
    {
        return nil;
        // also tried
        // return [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)];
        // but that didn't work either
    }
}

这适用于自定义标题,但对于我不想要任何标题的表格,它会显示一个白框。我认为return nil;会阻止为该表显示任何标题。这个假设是否正确?还有别的东西会覆盖吗?我怎么能这么做才能显示出来?

3 个答案:

答案 0 :(得分:11)

每当您实施viewForHeaderInSection方法时,您还必须实施heightForHeaderInSection方法。对于没有标题的部分,请务必返回0作为高度。

答案 1 :(得分:1)

如果您使用这种方式,则无需计算身高。

tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = 50

如果您有空白部分,可以将高度设置为零,或者您不需要此方法。

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 2 {
            return 0
        }
        return UITableViewAutomaticDimension
    }

答案 2 :(得分:0)

根据@rmaddy评论

检查此代码
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

if (tableView == self.myTable1)
    // Wants Custom Header

{
    //custome header height
    return 20.0f;//height of custom header

    }
    elseIf (tableView == self.myTable2)
                    // Wants No header
    {
        return 0;
    }


}
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (tableView == self.myTable1)
    // Wants Custom Header
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.contentSize.width,20);

                    // ... Do stuff to customize view ...

                    return view;
                    }
                    elseIf (tableView == self.myTable2)
                    // Wants No header
                    {
                        return nil;
                    }
}