4

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

单元格左侧带有标签的单元格样式,带有左对齐和黑色文本;右侧是具有较小蓝色文本且右对齐的标签。设置应用程序使用这种样式的单元格。

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

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

我的问题是左边的 UILabel 被截断而不是右边的,所以它显示为:

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

如果我使 URL 更长,那么两个标签都会被截断,例如

U... http://www.mylongurl.com ...子目录/等

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

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

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

2 回答 2

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);
}

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

于 2009-11-09T15:30:48.750 回答
3

你有几个选择。

可能在精神上最接近您似乎要求的是在您的标签框架中UITableViewDelegate乱七八糟tableView:willDisplayCell:forRowAtIndexPath:UITableViewDataSource(在's中进行单元格布局修改是tableView:cellForRowAtIndexPath:行不通的,因为UITableViewCells在 .s 之后会完成所有内部布局工作tableView:cellForRowAtIndexPath:。)您可以使用NSString's -sizeWithFont:来帮助确定textLabel.

正如您所提到的,您还可以采用不同的方法,例如子类化UITableViewCell或设置cell.textLabel.adjustsFontSizeToFitWidth = YES

于 2009-11-09T16:33:07.843 回答