如何将其他视图与UITableViewCell的textLabel对齐?

时间:2015-10-14 14:33:47

标签: ios uitableview

我为table.tableHeaderView创建了一个文字标签,我希望它与标准UITableViewCell.textLabel中的文字保持一致。如何获得正确的X偏移?

cell.indentationWidth是10和cell.indentationLevel = 0,但这显然不是全部。在cellForRowAtIndexPath:willDisplayCell: tableView方法中,UITableViewCell.textLabel的X原点为0。

我可以提前确定cell.textLabel的X原点吗?或者我必须得到它,然后找到相对于tableView的原点,然后更新我的headerLabel的X原点?

在此处下载sample project

@implementation ViewController {
    UILabel *headerTextLabel;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"myId"];

    CGRect headerFrame = CGRectMake(0, 0, self.tableView.bounds.size.width, 100); // arbitrary height
    UIView *header = [[UIView alloc] initWithFrame:headerFrame];
    header.backgroundColor = [UIColor lightGrayColor];
    self.tableView.tableHeaderView = header;

    CGFloat xHeaderLabel = 0; // What do I set this to?

    // header text label should be left-aligned and match the cell text
    headerTextLabel = [[UILabel alloc] initWithFrame:CGRectMake(xHeaderLabel, 0, 300, 40)]; // arbitrary header size
    headerTextLabel.text = @"Header text -- align with cells";
    headerTextLabel.backgroundColor = [UIColor orangeColor];
    [header addSubview:headerTextLabel];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myId"];
    cell.textLabel.text = [NSString stringWithFormat:@"Cell %ld", (long)indexPath.row];
    cell.textLabel.backgroundColor = [UIColor redColor];
    return cell;
}


- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.backgroundColor = [UIColor redColor];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5;
}

enter image description here

1 个答案:

答案 0 :(得分:1)

查看UITableView上的分隔符插页:

 NSLog(self.tableView.separatorInset.left);  // -> 15.0