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