在UITableViewCell中dynamic更改标签宽度

我正在试图build立一个自定义表格视图。

在这里输入图像说明

如图所示,默认情况下,我将标签的宽度设置为160,并在装入表格时更改dynamic宽度。 我通过修改“cellForRowAtIndexPath”委托方法来实现这一点。

因此,根据date的长度,我将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; 

但是当我加载的应用程序,所有的标签1被设置为故事板中设置为160点,虽然通过debugging,我已经看到我的代码得到执行每个单元格。

在这里输入图像说明

令我惊讶的是,如果我向下滚动并再次滚动。 代码块被再次调用,标签被设置为我所希望的。

在这里输入图像说明

而且,如果我在标签之间切换,标签又会恢复到exception状态。

在这里输入图像说明

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

如果您正在使用自动布局,则只需设置x和y位置,然后不设置高度和宽度,标签将正确调整其大小以适应其内容。 一个警告,如果你正在使用Xibs或故事板,不要​​在你的标签在故事板中的任何文字,或者它会想要大小的文字。 因此,从故事板中删除占位符文本,设置约束,然后你将很好去。

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