Basically I want to change the font and the color of my section header, so I implement tableVieW:viewForHeaderInSection
. First I tried this code:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UILabel* headerLabel = [[[UILabel alloc] init] autorelease];
headerLabel.frame = CGRectMake(10, 0, 300, 40);
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.textColor = [UIColor blackColor];
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.text = @"My section header";
return headerLabel;
}
but for some reason the frame property is ignored (I'm talking about the 10px inset on the left). Now I use the following:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView* headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)] autorelease];
UILabel* headerLabel = [[UILabel alloc] init];
headerLabel.frame = CGRectMake(10, 0, 300, 40);
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.textColor = [UIColor blackColor];
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.text = @"My section header";
[headerView addSubview:headerLabel];
[headerLabel release];
return headerView;
}
with the desired results. Can someone explain to me why the second approach works and the first doesn't?
PS. In both cases I implement tableView:heightForHeaderInSection
as well, returning 40.0
That's because the UITableView automatically sets the frame of the header view you provide to
(0, y, table view width, header view height)
y
is the computed position of the view and
header view height
is the value returned by tableView:heightForHeaderInSection: