Header和第一个单元格之间的分离 - 在简单的UITableView中

时间:2010-11-29 21:12:26

标签: ios uitableview cocoa-touch uikit

我有一张普通风格的桌子,只有一个部分。我已经实现了viewForHeaderInSection:以在节标题中添加自定义视图。

我无法在我的表部分标题视图和第一部分之间看到分隔线 细胞。 [见附图]

alt text

我做错了什么?

6 个答案:

答案 0 :(得分:41)

正如Jeremy在回答中所说,iOS不会在页眉/页脚的上方/下方添加分隔符;您可以使用UIView自行创建一条线。

以下是将标准外观分隔符视图添加到标题视图的代码:

CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-1, 320, 1);
seperatorView = [[[UIView alloc] initWithFrame:sepFrame] autorelease];
seperatorView.backgroundColor = [UIColor colorWithWhite:224.0/255.0 alpha:1.0];
[headerView addSubview:seperatorView];

如果您试图让它看起来像普通的表格视图单元格,您可能还需要在标题视图的顶部添加一个。

答案 1 :(得分:31)

自定义页眉和页脚在其下方/上方不包含分隔符。您需要在自定义视图中自己实现分隔符(或切换到分组样式,即使使用自定义页眉/页脚,也会在其上方和下方显示该组的轮廓)。

答案 2 :(得分:11)

如果您只想在表格标题和表格第一行之间提供空间,那么您可以使用

tableView:heightForHeaderInSection:(NSInteger)section

的方法中
if(section ==0)
    return 3; // (space u want to give between header and first row);

return 10; //(ur section header height)

tableView:viewForHeaderInSection:(NSInteger)section

的方法中
  UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];
  headerView.backgroundColor = [UIColor clearColor];   // use your own design

  return headerView;

答案 3 :(得分:5)

通过返回+1 tableView:numberOfRowsInSection:中现有的行数,向要添加分隔符的部分添加额外的“隐藏”行。然后添加以下方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ( indexPath.section == sectionOfHiddenRow && indexPath.row == indexOfHiddenRow )
        return 0.f;
    else
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

如果您希望分隔符位于某个部分的顶部(标题之后),则indexOfHiddenRow将为0。如果你想要它在一个部分的底部(在页脚之前),它将是[self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1

现在在tableView:cellForRowAtIndexPath:内,只需为隐藏行返回[UITableViewCell new](它不会显示,因此无需设置框架或任何内容)。您可能需要在-1UITableViewDataSource方法中进行一些UITableViewDelegate索引调整,但它可以正常工作(在iOS 7中测试),可以保证一致的样式(无需绘制自己的“假”分隔符 - 这是一个真正的系统绘制的UITableView分隔符。

答案 4 :(得分:2)

我用一些分隔符方法(在Swift中)扩展了UITableViewCell。有了它们,我可以在标题中添加分隔符或从常规单元格中删除它们。我希望它可以帮助一些人。

public extension UITableViewCell
{
    func addSeparator(y: CGFloat, margin: CGFloat, color: UIColor)
    {
        let sepFrame = CGRectMake(margin, y, self.frame.width - margin, 0.7);
        let seperatorView = UIView(frame: sepFrame);
        seperatorView.backgroundColor = color;
        self.addSubview(seperatorView);
    }

    public func addTopSeparator(tableView: UITableView)
    {
        let margin = tableView.separatorInset.left;

        self.addSeparator(0, margin: margin, color: tableView.separatorColor!);
    }

    public func addBottomSeparator(tableView: UITableView, cellHeight: CGFloat)
    {
        let margin = tableView.separatorInset.left;

        self.addSeparator(cellHeight-2, margin: margin, color: tableView.separatorColor!);
    }

    public func removeSeparator(width: CGFloat)
    {
        self.separatorInset = UIEdgeInsetsMake(0.0, width, 0.0, 0.0);
    }

}

答案 5 :(得分:1)

在标题视图和第一行之间添加一个分隔符: - 为了查看委托方法中的标题,添加一个子视图self.separator // @ property(非原子,强)UIImageView *分隔符;

- (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {

return 41; 
}


- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {

self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR];

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]];
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1);
[self.headerView addSubview:self.separator];
return self.headerView;

}