Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS tableviewheader subview not shown

I use a UITableView and I want to setup a text at the beginning. My code is:

UIView *tableHeaderView = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, self.tableView.frame.size.width, 20.0)];
tableHeaderView.backgroundColor = [UIColor groupTableViewBackgroundColor];
UILabel *tableHeaderLabel = [[UILabel alloc]initWithFrame:CGRectMake(15.0,0,tableHeaderView.frame.size.width-15.0,tableHeaderView.frame.size.height)];
tableHeaderLabel.text = @"Countries";
if([UIFont respondsToSelector:@selector(preferredFontForTextStyle:)])
    tableHeaderLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
else
    tableHeaderLabel.font = [UIFont boldSystemFontOfSize:14.0];
[tableHeaderView addSubview:tableHeaderLabel];
self.tableView.tableHeaderView = tableHeaderView;
[tableHeaderView bringSubviewToFront:tableHeaderLabel];
[tableHeaderLabel release];
[tableHeaderView release];

The problem is that the text isn't shown. If I suppress the backgroundColor of the main header view, or if I replace it with a transparent one as if the Label awas under the main header view. So I added the line:

[tableHeaderView bringSubviewToFront:tableHeaderLabel];

but this doesn't fix the issue. I can't use the Label directly as the tableViewHeaderView directly becaus I want to left space at the left of the text.

Anybody have an idea to help me?

Thanks.

like image 680
user2889962 Avatar asked Aug 10 '26 02:08

user2889962


1 Answers

The only problem you have here is a typo in the first line, initialized an UIView wrongly as an UILabel. The compiler will not compliant as UILabel is a subclass of UIView.

I ran the following code and it worked as expected: (The code is for ARC, if you are not using it, don't forget to do the release!)

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0,
                                                                        self.tableView.frame.size.width,
                                                                        20.0)];
    tableHeaderView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    UILabel *tableHeaderLabel = [[UILabel alloc] initWithFrame:CGRectMake(15.0, 0,
                                                                          tableHeaderView.frame.size.width - 15.0,
                                                                          tableHeaderView.frame.size.height)];
    tableHeaderLabel.text = @"Countries";
    tableHeaderView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    if([UIFont respondsToSelector:@selector(preferredFontForTextStyle:)]) {
        tableHeaderLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
    } else {
        tableHeaderLabel.font = [UIFont boldSystemFontOfSize:14.0];
    }
    [tableHeaderView addSubview:tableHeaderLabel];
    self.tableView.tableHeaderView = tableHeaderView;
}
like image 50
Cai Avatar answered Aug 12 '26 16:08

Cai



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!