添加iOS UITableView HeaderView(不是节头)

我想添加一个表头(不是节标题),例如在联系人应用程序中: 在这里输入图像说明

就像这样 – 在桌子上方的图像旁边的标签。

我希望所有视图都是可滚动的,所以我不能把它放在桌子外面。

我怎样才能做到这一点?

UITableView有一个tableHeaderView属性。 把它设置为你想要的任何视图。

使用一个新的UIView作为一个容器,将一个文本标签和一个图像视图添加到新的UIView ,然后将tableHeaderView设置为新的视图。

例如,在一个UITableViewController

 -(void)viewDidLoad { // ... UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; [headerView addSubview:imageView]; UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; [headerView addSubview:labelView]; self.tableView.tableHeaderView = headerView; [imageView release]; [labelView release]; [headerView release]; // ... } 

在Interface Builder中你可以做到这一点很容易。 只要用表格创build一个视图,然后把另一个视图放到表格上。 这将成为表头视图。 将您的标签和图像添加到该视图。 查看下面的图片查看层次结构。 在Interface Builder中查看层次结构

你也可以简单地在界面构build器中创build一个UIView,拖放ImageView和UILabel(使它看起来像你想要的标题),然后使用它。

一旦你的UIView看起来像你想要的样子,你可以编程从XIB初始化并添加到你的UITableView。 换句话说,您不必在IB中devise整个表格。 只是headerView(这样的标题视图也可以在其他表中重用)

例如,我有一个自定义的UIView为我的表头之一。 这个视图是由一个名为“CustomHeaderView”的xib文件pipe理的,它在我的UITableViewController子类中使用下面的代码加载到表头中:

 -(UIView *) customHeaderView { if (!customHeaderView) { [[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil]; } return customHeaderView; } - (void)viewDidLoad { [super viewDidLoad]; // Set the CustomerHeaderView as the tables header view self.tableView.tableHeaderView = self.customHeaderView; } 

Swift中

 override func viewDidLoad() { super.viewDidLoad() // We set the table view header. let cellTableViewHeader = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewHeaderCustomCellIdentifier) as! UITableViewCell cellTableViewHeader.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewHeaderCustomCellIdentifier]!) self.tableView.tableHeaderView = cellTableViewHeader // We set the table view footer, just know that it will also remove extra cells from tableview. let cellTableViewFooter = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewFooterCustomCellIdentifier) as! UITableViewCell cellTableViewFooter.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewFooterCustomCellIdentifier]!) self.tableView.tableFooterView = cellTableViewFooter } 
 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)]; headerView.backgroundColor=[[UIColor redColor]colorWithAlphaComponent:0.5f]; headerView.layer.borderColor=[UIColor blackColor].CGColor; headerView.layer.borderWidth=1.0f; UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5,100,20)]; headerLabel.textAlignment = NSTextAlignmentRight; headerLabel.text = @"LeadCode "; //headerLabel.textColor=[UIColor whiteColor]; headerLabel.backgroundColor = [UIColor clearColor]; [headerView addSubview:headerLabel]; UILabel *headerLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)]; headerLabel1.textAlignment = NSTextAlignmentRight; headerLabel1.text = @"LeadName"; headerLabel.textColor=[UIColor whiteColor]; headerLabel1.backgroundColor = [UIColor clearColor]; [headerView addSubview:headerLabel1]; return headerView; }