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

时间:2011-02-11 14:39:43

标签: iphone uitableview frame

基本上我想更改部分标题的字体和颜色,因此我实现了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;
}

但由于某种原因,框架属性被忽略(我在谈论左边的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;
}

具有所需的结果。有人可以向我解释为什么第二种方法有效,第一种方法没有?

PS。在这两种情况下,我也实现tableView:heightForHeaderInSection,返回40.0

2 个答案:

答案 0 :(得分:26)

那是因为UITableView会自动设置您提供给

的标题视图的框架

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

y是视图的计算位置和 header view heighttableView:heightForHeaderInSection:

返回的值

答案 1 :(得分:1)

或许最好添加一个子视图:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
    let label = UILabel(frame: CGRect(x: 15, y: 5, width: tableView.frame.width, height: 20))
    label.text = "\(sections[section].year)"
    view.addSubview(label)
    return view
}