为什么tableVieW:viewForHeaderInSection忽略我的UILabel的frame属性?

phi*_*phi 16 iphone frame uitableview

基本上我想改变我的节头的字体和颜色,所以我实现tableVieW:viewForHeaderInSection.首先我尝试了这段代码:

-(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;
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,框架属性被忽略(我在谈论左边的10px插图).现在我使用以下内容:

-(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;
}
Run Code Online (Sandbox Code Playgroud)

有了预期的结果.有人可以向我解释为什么第二种方法有效而第一种方法不起作用?

PS.在这两种情况下我都实现tableView:heightForHeaderInSection了,返回40.0

Jil*_*ouc 26

那是因为UITableView会自动设置您提供的标题视图的框架

(0, y, table view width, header view height)

y是视图的计算位置, header view height是返回的值tableView:heightForHeaderInSection:

  • 它也可以在标签中的文本前面添加一些空格,这对于快速UILabel调整来说是一个很好的技巧. (5认同)