iOS自定义表格视图单元格标签调整大小损坏

时间:2011-07-17 13:39:28

标签: iphone objective-c ios uikit uilabel

我正在为客户端编写iOS应用程序,主视图是一个表格视图,我用文本填充单元格,就像大多数iOS twitter客户端一样。

我创建了一个包含3个标签的自定义单元格视图,并使用文本填充这些标签。其中一个标签需要根据文本的数量自动调整大小(最多140个字符)。

这可以正常工作,直到我向上/向下滚动列表时文本延伸到一个完整的行(就像标签已展开)或者只占用部分空间,因此它会更深入并溢出到其他标签中(我确实按照另一个类似的SO问题启用了“剪辑子视图”)

因此,当首次加载表及其数据时,屏幕如下所示:

before scrolling http://lloydsparkes.co.uk/files/iOS-BeforeScrolling.png

经过一些滚动后,它看起来像是:

after scrolling http://lloydsparkes.co.uk/files/iOS-AfterScrolling.png

所以看起来标签在滚动过程中正在调整大小(可能是由于同一个单元被重用了?)并且没有调整大小到正确的大小。

我填写单元格的代码是:

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

static NSString *myID = @"customCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myID];

if(cell == NULL) {

    [[NSBundle mainBundle] loadNibNamed:@"CustomCellView" owner:self options:nil];

    cell = customCell;
    self.customCell = nil;
}

Post *p = [posts objectAtIndex:indexPath.row];

UILabel *label = (UILabel*)[cell viewWithTag:15];
label.text = p.Name;

label = (UILabel*)[cell viewWithTag:10];
label.text = p.Text;
[label sizeToFit];

label = (UILabel*)[cell viewWithTag:20];
label.text = [p Source];

//[cell layoutSubviews];

return cell;
}

所以我要问的是,是什么导致了这个问题?以及如何解决?

1 个答案:

答案 0 :(得分:7)

sizeToFit方法可能表现得很奇怪,因为每次调用cellForRowAtIndexPath时都会更改UILabel框架。

您可以尝试的一件事是在调用label之前将sizeToFit对象的帧设置回原始大小(在NIB文件中设置的valeu)

[label setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 50.0f)];    
[label sizeToFit];