UITableViewCell - 如何制作正确的UILabel截断而不是左边的截断?

时间:2009-11-09 15:05:09

标签: iphone uitableview uilabel

我使用UITableViewCellStyleValue1创建了一个UITableViewCell,Apple文档定义为:

  

单元格样式,单元格左侧带有标签,左对齐和黑色文本;在右侧是一个标签,蓝色文字较小,右对齐。 “设置”应用程序使用此样式的单元格。

我正在尝试将单元格文本设置为在左侧显示一些短文本,在右侧显示一些长文本,例如

  

网址http://www.mylongurl.com/subdirectory/etc

我的问题是左UILabel被截断而不是右边的,因此显示为:

  

你...... http://www.mylongurl.com/subdirectory/etc

如果我使网址更长,那么标签会被截断,例如

  

你...... http://www.mylongurl.com...subdirectory/etc

有没有办法在不使用自定义UITableViewCell的情况下制作正确的UILabel截断而不是左边的截断?我知道如何创建自定义UITableViewCell,但它似乎有点矫枉过正?

我可以设置UILineBreakMode来改变文本在UILabel中截断的位置,但我看不到让detailTextLabel调整其宽度以让textLabel显示自己的方法。

[[lCell textLabel] setText:@"URL"];
[[lCell detailTextLabel] setText:@"http://www.mylongurl.com/subdirectory/etc"];
[[lCell detailTextLabel] setLineBreakMode:UILineBreakModeMiddleTruncation];

2 个答案:

答案 0 :(得分:3)

最好的解决方案是创建UITableView单元的子类,并将自定义设置为init中的标签。如果您希望左侧标签更宽,您可能希望覆盖layoutSubviews并调整标签大小。

- (void)layoutSubviews {
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(0.0, 0.0, 100.0, self.frame.size.height);
    self.detailTextLabel.frame = CGRectMake(0.0, 0.0, 220.0, self.frame.size.height);
}

显然这些是任意值。您需要使用不同的尺寸来满足您的需求。

答案 1 :(得分:3)

你有几个选择。

可能与您似乎要求的最接近的是使用UITableViewDelegate tableView:willDisplayCell:forRowAtIndexPath:中的标签框架。 (在UITableViewDataSource的{​​{1}}中进行单元格布局修改将无效,因为tableView:cellForRowAtIndexPath:UITableViewCells之后执行所有自己的内部布局。)您可以使用{{ 1}} - tableView:cellForRowAtIndexPath:帮助确定NSString的布局要求。

您也可以采用不同的方法,例如子类化sizeWithFont:或设置textLabel