【问题标题】:UILabel dynamic width with sizeToFit on a cell单元格上带有 sizeToFit 的 UILabel 动态宽度
【发布时间】:2013-07-21 04:21:19
【问题描述】:

我有一个自定义的UITableViewCell,在Storyboard 里面有一个UILabel。我动态设置了这个UILabel 的文本,我需要相应地调整UILabel 的宽度,因为在它之后我还有另一个UILabel 必须保持并排。

我正在尝试

> MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
> author = @"Some dynamic text";
> cell.authorLabel.text = author;
> [cell.authorLabel sizeToFit];

会发生什么: 在第一次渲染时,UILabel 只是保持在storyboard 上设置的宽度,因此文本被裁剪或后面的空间太大。

滚动后,单元格出列并正确应用sizeToFit 方法,但为时已晚,因为第二个UILabel 已经定位在错误的位置。 (由于信誉限制,无法发布图片)

有什么想法吗?

【问题讨论】:

标签: iphone uitableview uilabel sizetofit


【解决方案1】:

也许你的意思是这样的:

MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
author = @"Some dynamic text";
cell.authorLabel.text = author; <-- excluded in your code
[cell.authorLabel sizeToFit];

如果这不起作用,请尝试使用这样的方法:

继承 UITableViewCell 并重写下面的方法:

- (void)setSelected:(BOOL) selected
{ 
    [super setSelected:selected];
    [self.authorLabel sizeToFit];
}

【讨论】:

  • 抱歉忘记了您正确添加的行。无论如何这仍然不能解决问题
【解决方案2】:

使用这个来获取动态高度和宽度,

CGSize sizeDynamic  = [str sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:14] constrainedToSize:CGSizeMake(CGFLOAT_MAX,CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];

你可以得到,

sizeDynamic.height and sizeDynamic.width values

【讨论】:

  • 这可以根据内容正确调整UILabel 的大小,但我仍然有这样的问题,即不会移动并排标签,因此它不尊重水平间距约束,最终结果是两个文本重叠。我应该根据第一个标签的新宽度计算第二个标签的新位置吗?注:如果这个sizeWithFont 有效,而sizeToFit 在同一点上无效,那么我对sizeToFit 方法有什么遗漏?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多