如何在iOS中的UITableViewCell中获取默认textLabel的大小?

时间:2013-10-12 08:50:33

标签: ios uitableview

我尝试在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有一个类似于这个的模板,但我不想使用详细视图模板)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

默认大小为 [cell labelsize = 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;
    }

快乐的编码......