我正在使用UITableView
,其单元格样式为UITableViewCellStyleValue1
。
我想在detailTextLabel
中有多行,这可能吗?或者我是否必须制作自定义单元格?
答案 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,自动换行规则就像你创建的标签一样适用。
编辑:想一想,如果文本超出某些线条阈值,您还需要更改单元格的高度。可能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使用尽可能多的行来正确显示文本。