在UITableViewCell内动态更改标签宽度

时间:2013-11-06 22:53:37

标签: ios iphone uitableview

我正在尝试建立自定义表格视图。

enter image description here

正如您在图片中看到的那样,我将标签的宽度默认设置为故事板一侧的160点,并在加载表格时动态更改宽度。我通过修改“cellForRowAtIndexPath”委托方法来实现这一点。

因此,基于日期的长度,我将Label1的宽度设置为最大,利用手机屏幕上的不动产。

    CGFloat timeStampWidth = [cell.timestamp.text sizeWithFont:cell.timestamp.font].width;
    CGFloat ksCompanyNameLableMaxWidth = 235;
    NSLog(@"timeStampWidth:%f", timeStampWidth);
    CGSize companyNameLableSize = CGSizeMake((ksCompanyNameLableMaxWidth - timeStampWidth), cell.companyNameLabel.frame.size.height);
    CGRect newFrame = cell.companyNameLabel.frame;
    newFrame.size = companyNameLableSize;
    cell.companyNameLabel.frame = newFrame;

但是当我加载应用程序时,所有label1都设置为故事板中设置的160点,尽管通过调试我看到我的代码已经为每个单元格执行。

enter image description here

令我惊讶的是,如果我向下滚动并再次向上滚动。再次调用代码块,并按照我的意愿设置标签。

enter image description here

此外,如果我在标签之间切换,标签会再次恢复到异常状态。

enter image description here

3 个答案:

答案 0 :(得分:3)

这听起来像是自动布局的结果 - 使用它时,你根本不应该设置帧,而应该调整约束。您可以将IBOutlet设置为标签的宽度约束,并在代码中调整其常量值。

答案 1 :(得分:0)

如果使用自动布局,则只需设置x和y位置,然后不设置高度和宽度,标签将正确调整其大小以适合其内容。如果您使用的是Xib或Storyboard,请注意,不要在故事板中的标签中放置任何文本,否则它会想要调整该文本的大小。因此,从故事板中删除占位符文本,设置约束,然后您就可以开始了。

答案 2 :(得分:0)

您还可以以编程方式创建和定位UILabel,这样iOS自动布局不会干扰您的帧更改。