iOS - 动态标签尺寸无法正常返回

时间:2012-06-11 21:46:02

标签: iphone ios uitableview ios5

我花了好几个小时试图解决这个问题,但没有成功。

我试图在UITableViewCell上显示数据,以便根据数据动态调整高度。

现在,应用程序似乎可以很好地处理大量数据,但是对于某些数据,标签无法正常调整。如您所见,已使用constrainedToSize功能返回给定文本的高度。

很多次都错误地给出了这个高度。例如。当标签文字为“高脉冲白色,在下滑道上 - 稳定的白色,略低于下滑的斜坡稳定的红色,低脉冲的红色。”当它应该大于那个时,返回的高度是63。

另一个例子: “高脉冲白色,在航道上和下滑道上 - 稳定的白色,偏离航线但在下滑道上 - 脉冲白色和红色;低脉冲红色”使标签高度返回84,当它应该超过标签没有的时候完全适合我的桌面视图。

我注意到一个奇怪的事情是,那些不正常的细胞通常有63或84的尺寸......我没有遇到过更多这样的尺寸,但如果这样可以帮助..

代码:

if (tableView.tag ==1) {
    NSString *cellText;
    if ([multipleAddressSplit count]==0) {

        if (indexPath.row ==0) {

            cellText =[OptionText1 objectAtIndex:i];
        }
        if (indexPath.row == 1) {

            cellText =[OptionText2 objectAtIndex:i];

        }
        if (indexPath.row == 2) {

            cellText =[OptionText3 objectAtIndex:i];

        }
    }


    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(OptionTable.frame.size.width , MAXFLOAT);
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    NSLog(@"========start=========");
    NSLog(@"Celltext is: %@",cellText);
    NSLog(@"Method Label %f",(labelSize.height));
    NSLog(@" 1/3rd %f",(OptionTable.frame.size.height/3-15));
    NSLog(@"=========stop========");


    if ((labelSize.height)<((OptionTable.frame.size.height/3)-15)) {
        NSLog(@" Returned 1/3rd is: %f",(OptionTable.frame.size.height/3));

        return (OptionTable.frame.size.height/3);
    }

    else {
        return labelSize.height + 15;

    }

提前谢谢。

2 个答案:

答案 0 :(得分:1)

对此的解决方案非常简单而且微不足道。

我将LabelSize的宽度等于单元格的宽度,而textLabel实际上距离每边约10个像素。从高度减去20个像素修复了问题。

感谢大家的答案。

答案 1 :(得分:0)

在委托方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *strIden = [NSString stringWithFormat:@"cell%d",indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:strIden];
         if(cell==nil){
                cell = [[[UITableViewCell alloc]  initWithStyle:UITableViewCellStyleValue1

                reuseIdentifier:strIden] autorelease];
         }
}

制作不同的小区ID。