【发布时间】:2010-08-20 23:07:03
【问题描述】:
我使用的是UITableView,单元格样式为UITableViewCellStyleValue1。
我想在detailTextLabel 中有多行,这可能吗?还是我必须制作一个自定义单元格?
【问题讨论】:
标签: ios iphone uitableview
我使用的是UITableView,单元格样式为UITableViewCellStyleValue1。
我想在detailTextLabel 中有多行,这可能吗?还是我必须制作一个自定义单元格?
【问题讨论】:
标签: ios iphone uitableview
您可以设置cell.detailTextLabel.numberOfLines = 2 以在其中获取 2 行。但是,我怀疑 UITableViewCell 在这种情况下会按照您的预期布置标签。您可能希望继承 UITableViewCell 并覆盖 -layoutSubviews 以根据需要定位标签。您可以致电[super layoutSubviews],然后调整标签的位置。您可能需要使用-[NSString sizeWithFont:constrainedToSize:lineBreakMode:] 来计算详细文本标签的正确大小。
或者,您可以尝试在-tableView:willDisplayCell:forRowAtIndexPath: 中进行调整,而不是继承 UITableViewCell,但如果单元格决定需要重新布局,那么您的调整将被删除。我建议您使用子类化方法。
编辑:顺便说一句,使用子类方法,您只需将[UITableViewCell alloc] 更改为[MyTableViewCellSubclass alloc]。由于您没有引入新的方法或属性,因此该变量仍可以保持为 UITableViewCell 的类型,您无需更改任何其他代码。
【讨论】:
UINib 来优化 nib 加载)。使用-layoutSubviews 调整标签的好处是您可以重用现有的textLabel 和detailTextLabel 属性,但您绝不需要使用这些属性。
cell.detailTextLabel 在最近的 swift 版本中现在是可选的,所以 cell.detailTextLabel.numberOfLines = 2 应该是 cell.detailTextLabel!.numberOfLines = 2
cell.detailTextLabel?.numberOfLines = 2。强制展开意味着如果您在没有详细标签的单元格上运行该行,您的整个应用程序将会崩溃。
detailTextLabel 是一个 UILabel,自动换行规则与您创建的标签一样适用。
编辑:只是想,如果文本超出某些行阈值,您还需要更改单元格的高度。大概 2 或 3 个就可以了。
【讨论】:
至少在 iOS 11 上,只要添加这一行就可以了。
cell.detailTextLabel.numberOfLines = 2;
【讨论】:
在 SWIFT 4.0 及更高版本上:
cell.detailTextLabel?.numberOfLines = 0
除非您不想超过 2 行,否则不要将 numberOfLines 设置为 2 作为 cmets 中的建议,因为这不是一种有效的编码方式。它不是动态的。行数可能会根据您的屏幕大小、辅助功能设置等而有所不同。将 numberOfLines 设置为 0,让操作系统使用尽可能多的行来正确显示您的文本。
【讨论】: