在UITableViewCell中向detailTextLabel添加多行

时间:2010-08-20 23:07:04

标签: ios iphone uitableview

我正在使用UITableView,其单元格样式为UITableViewCellStyleValue1

我想在detailTextLabel中有多行,这可能吗?或者我是否必须制作自定义单元格?

4 个答案:

答案 0 :(得分:16)

您可以设置cell.detailTextLabel.numberOfLines = 2以获得2行。但是,我怀疑UITableViewCell会像你期望的那样布局标签。您可能希望子类化UITableViewCell并覆盖-layoutSubviews以按您希望的方式定位标签。您可以拨打[super layoutSubviews],然后只需调整标签的位置即可。您可能希望使用-[NSString sizeWithFont:constrainedToSize:lineBreakMode:]来计算详细文本标签的正确大小。

或者,您可以尝试在-tableView:willDisplayCell:forRowAtIndexPath:中进行调整,而不是子类化UITableViewCell,但如果单元格决定需要重新布局,那么您的调整将被删除。我建议你使用子类化方法。

编辑:BTW,使用子类方法,您所要做的就是将[UITableViewCell alloc]更改为[MyTableViewCellSubclass alloc]。由于您没有引入新的方法或属性,因此变量仍然可以保持为UITableViewCell类型,您不必更改任何其他代码。

答案 1 :(得分:3)

detailTextLabel是一个UILabel,自动换行规则就像你创建的标签一样适用。

http://developer.apple.com/iphone/library/documentation/uikit/reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/instp/UILabel/lineBreakMode

编辑:想一想,如果文本超出某些线条阈值,您还需要更改单元格的高度。可能2或3是可以的。

答案 2 :(得分:1)

至少在iOS 11上,仅添加此行就可以很好地工作。

cell.detailTextLabel.numberOfLines = 2;

答案 3 :(得分:0)

在SWIFT 4.0及更高版本上:

cell.detailTextLabel?.numberOfLines = 0

除非您永远不希望多于2行,否则不要将numberOfLines设置为2作为注释中的建议,因为这不是一种有效的编码方法。它不是动态的。行数可能会因您的屏幕大小,可访问性设置等而异。将numberOfLines设置为0,让OS使用尽可能多的行来正确显示文本。