我正在尝试建立自定义表格视图。
正如您在图片中看到的那样,我将标签的宽度默认设置为故事板一侧的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点,尽管通过调试我看到我的代码已经为每个单元格执行。
令我惊讶的是,如果我向下滚动并再次向上滚动。再次调用代码块,并按照我的意愿设置标签。
此外,如果我在标签之间切换,标签会再次恢复到异常状态。
答案 0 :(得分:3)
这听起来像是自动布局的结果 - 使用它时,你根本不应该设置帧,而应该调整约束。您可以将IBOutlet设置为标签的宽度约束,并在代码中调整其常量值。
答案 1 :(得分:0)
如果使用自动布局,则只需设置x和y位置,然后不设置高度和宽度,标签将正确调整其大小以适合其内容。如果您使用的是Xib或Storyboard,请注意,不要在故事板中的标签中放置任何文本,否则它会想要调整该文本的大小。因此,从故事板中删除占位符文本,设置约束,然后您就可以开始了。
答案 2 :(得分:0)
您还可以以编程方式创建和定位UILabel,这样iOS自动布局不会干扰您的帧更改。