0

我尝试在 UITableViewCell 的默认 textLabel 下方添加一个辅助(自定义)标签。

我想正确设置框架,它应该真正低于 textLabel。但是,所有值都返回 0,因此我无法正确准备自定义视图的框架。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

NSLog(@"%f, %f, %f, %f", cell.textLabel.frame.origin.x,cell.textLabel.frame.origin.y,cell.textLabel.frame.size.height,cell.textLabel.frame.size.width);

印刷

0.000000, 0.000000, 0.000000, 0.000000

如何为我的自定义辅助描述视图获取正确的 x 和 y?(我知道 UITableViewCell 有一个类似于这个的模板,但我不想使用详细视图模板)

4

2 回答 2

1

您很可能不会在加载后立即获得单元格中的大小。最初cellForRowAtIndexPath:会给你零值。您必须以某种方式滚动出视图或调用[tableView reload]方法。这将cellForRowAtIndexPath:再次调用新值。框架的来源会不同,但大小应该相同。我使用这种技术来获取 detailTextLabel.frame 的大小。这是我的示例以及我如何获得尺寸:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ......
    NSLog(@“detailCell frame is %@”, NSStringFromCGRect(cell.detailTextLabel.frame));
    ......
}

祝你好运

于 2014-01-16T19:02:03.250 回答
0

默认大小为[单元格标签大小 = 15 0 43.5 270]

当 cell=nil 时,你不会得到 textLabel 的大小。将您的表格视图向上拖动,然后检查日志。你会发现这些值。

但是,如果您想要两个标签,请使用此代码。这很简单。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell =[ tableView dequeueReusableCellWithIdentifier:@"cell"];
        UILabel * invoiceTitle;
        UILabel * projectTitle;

        if(cell==nil)
        {
            cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];

            invoiceTitle     = [[UILabel alloc]initWithFrame:CGRectMake(14, 0, cell.contentView.frame.size.width, cell.contentView.frame.size.height/2)];
            [invoiceTitle setTag:111];
            [cell.contentView addSubview:invoiceTitle];
            [invoiceTitle release];

            projectTitle     = [[UILabel alloc]initWithFrame:CGRectMake(14, cell.contentView.frame.size.height/2 + 1, cell.contentView.frame.size.width - cell.contentView.frame.size.height/2];
            [projectTitle setTag:222];
            [cell.contentView addSubview:projectTitle];
            [projectTitle release];
        }
        else
        {

            invoiceTitle = (UILabel *)[cell.contentView viewWithTag:111];
            projectTitle = (UILabel *)[cell.contentView viewWithTag:222];
        }

        [projectTitle setText:LOCAL(@"Title1")];
        [invoiceTitle setText:@"Title2"];

        return cell;
    }

快乐的编码...

于 2013-10-12T09:16:57.110 回答