添加 iOS UITableView HeaderView (不是 section header)

我想添加一个表头(而不是节头) ,比如在联系人应用程序中: enter image description here

就像那样——在桌子上方的图像旁边的一个标签。

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

我该怎么做?

230744 次浏览

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 很容易。只需创建一个带有表的视图,然后将另一个视图拖放到该表上。这将成为表头视图。将标签和图像添加到该视图。有关视图层次结构,请参见下面的图片。 View Hierarchy in Interface Builder

你也可以简单地在 Interface Builder 中创建一个 uiView,然后拖放 ImageView 和 UILabel (让它看起来像你想要的头文件) ,然后使用它。

一旦您的 UIView 看起来像您希望的那样,您就可以通过编程从 XIB 初始化它并添加到您的 UITableView 中。换句话说,您不必在 IB 中设计 ENTIRE 表。只使用 headerView (这样头视图也可以在其他表中重用)

例如,我的一个表头有一个自定义 UIView。该视图由名为“ CustomHeaderView”的 xib 文件管理,并使用我的 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;
}
- (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;


}

斯威夫特:

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
}