tableView.tableHeaderView正在设置但未绘制

qua*_*ato 11 iphone xcode uitableview

每当我设置tableHeaderView时,我都没有在模拟器中看到它.如果我将其添加为子视图,它最终会在节标题下面绘制.知道我在这里缺少什么吗?

我有一个XIB文件.我没有看到IB中的任何属性影响headerViews.

- (void)viewDidLoad {   
[super viewDidLoad];
MyTitleView *titleView = [[MyTitleView alloc] initWithFrame:CGRectMake(60,0,260,40)];
titleView.label.text = @"My Title";
self.navigationItem.titleView = titleView;
[titleView release];

StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)];
self.tableView.tableHeaderView = headerView;
//  [self.view addSubview:self.tableView.tableHeaderView];
//  [headerView release];


NSLog(@"Header: %@",self.tableView.tableHeaderView); //Logs ] Header:     <StandardTableHeaderView: 0x5a508b0; frame = (0 0; 320 44); layer = <CALayer: 0x5a51130>>
Run Code Online (Sandbox Code Playgroud)

编辑:StandardTableHeaderView.m init方法:

- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
    self.backgroundColor = [UIColor redColor];
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x,0,frame.size.width,frame.size.height)];
    self.label.backgroundColor = [UIColor clearColor];
    self.label.textColor = [UIColor whiteColor];
    self.label.font = [UIFont fontWithName:@"Helvetica" size:16];
    [self addSubview:self.label];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ler 7

首先你的代码看起来很好.

2个可能的问题:

  • self.tableView 没有设定
  • tableHeaderView 之后被覆盖了 viewDidLoad


Rob*_*Rob 6

我遇到了同样的问题,并注意到如果我通过调用初始化我的tableview,我在NIB中定义的任何tableViewHeader都不会出现:

- (id)initWithStyle:(UITableViewStyle)style
Run Code Online (Sandbox Code Playgroud)

但是当我使用以下方法初始化我的tableview时,它毫不费力地出现了:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
Run Code Online (Sandbox Code Playgroud)

奇怪的.


Kal*_*lle 6

注意!如果您希望表视图为您设置标题视图的框架,那么您就错了,并且会得到非常奇怪的结果.

我让我CGRectZero认为它会自行解决,但事情不会出现,当它发生时,它会显示在导航栏下面或者插入第一个单元格等等.