iOS-模仿系统默认的tableView标头

时间:2013-09-11 09:32:05

标签: iphone ios uitableview uilabel

我想模仿以编程方式此标头的确切外观: enter image description here

到目前为止,我最好的尝试是:

UILabel* header = [[UILabel alloc] init] ;
header.backgroundColor = [UIColor clearColor];
header.textAlignment = NSTextAlignmentCenter;
header.textColor = [[UIColor alloc] initWithRed:86 green:92 blue:112 alpha:0.1];
header.shadowColor = [UIColor darkGrayColor];
header.shadowOffset = CGSizeMake(1,0);
header.font = [UIFont boldSystemFontOfSize:18];

但它看起来像这样: enter image description here

有人可以帮我确切地说明这一点吗?

提前致谢!

3 个答案:

答案 0 :(得分:3)

挪威人刚刚写了一篇关于此事的博文:http://www.gersh.no/posts/view/default_styling_of_sections_headers_in_uitableview_grouped

enter image description here

所有学分都归他所有。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
    containerView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    CGRect labelFrame = CGRectMake(20, 2, 320, 30);
    if(section == 0) {
        labelFrame.origin.y = 13;
    }
    UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:17];
    label.shadowColor = [UIColor colorWithWhite:1.0 alpha:1];
    label.shadowOffset = CGSizeMake(0, 1);
    label.textColor = [UIColor colorWithRed:0.265 green:0.294 blue:0.367 alpha:1.000];
    label.text = [self tableView:tableView titleForHeaderInSection:section];
    [containerView addSubview:label];
    return containerView;
}

答案 1 :(得分:1)

您需要设置header.frame = CGRectMake(10,1, 100, 18 );

使用UITableView

的数据源方法
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return @"Header"; // just pass name of your hearder
}

<强>编辑:

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
   UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
   UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 2, 100, 18)];
   label.text= [self.listOfHeader objectAtIndex:section];
   label.backgroundColor=[UIColor clearColor];
   label.textAlignment=NSTextAlignmentLeft;
   [view addSubview:label];
   return view;
}

并添加

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 20;
}

答案 2 :(得分:0)

您可以做什么动态/编程地计算UILabel的宽度。使用此代码:

CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
                        constrainedToSize:maximumLabelSize 
                        lineBreakMode:yourLabel.lineBreakMode]; 

然后将10个像素添加到你得到的宽度。设置UILabel的框架。并按照以下方式设置:

header.frame = CGRectMake(0.0,5.0,expectedLabelSize.width + 10.0,expectedLabelSize.height);
header.textAlignment = NSTextAlignmentRight;