iOS:具有多行的 UITableView 单元格?
Posted
技术标签:
【中文标题】iOS:具有多行的 UITableView 单元格?【英文标题】:iOS: UITableView cells with multiple lines? 【发布时间】:2011-05-11 12:43:58 【问题描述】:拥有多行 UITableView 单元格的最佳方式是什么?比方说 5.. 还是 6?
而不是 textLabel 和 la detailTextLabel ?我应该创建自定义样式吗?还是自定义视图?
任何教程/示例都被广泛接受。
谢谢
【问题讨论】:
单元格的高度应该变化吗?还是固定的? @Nick Weaver 是的,应该有所不同,否则没有空间 【参考方案1】:您可以为此使用 UITableViewCell 中现有的 UILabel 视图。秘诀是做到以下几点:
cell.textLabel.numberOfLines = 0;
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
默认情况下,UILabel 只允许 1 行文本。将 numberOfLines 设置为 0 基本上消除了对显示的行数的任何限制。这允许您拥有多行文本。
将 lineBreakMode 设置为 Word Wrap 告诉它将长文本行自动换行到标签的下一行。如果你不想这样,你可以跳过那一行。
您可能还需要根据需要调整表格视图单元格的高度,以便为您添加的多行文本腾出更多空间。
对于 ios 6.0 及更高版本,使用 NSLineBreakByWordWrapping
代替已弃用的 UILineBreakModeWordWrap
。
【讨论】:
嗯,听起来不错。我问的问题不是很准确:我实际上需要精确设置下一行,我不能只是换行。我应该在 NSStrings 中添加 "\n" 吗? 添加一个 '\n'(连同我上面的解决方案)应该可以让您在标签中包含多行文本。 完成后如何自动调整高度? 对于 iOS6 或更高版本使用 NSLineBreakByWordWrapping。 (UILineBreakModeWordWrap 已弃用) 就我而言,我需要更新界面构建器/故事板。我包括'cell.textLabel.numberOfLines = 0;'但是只有在情节提要中找到单元格“行”并将其从“1”更改为“0”后才换行。我猜如果代码和情节提要冲突,应用程序遵循情节提要设置。【参考方案2】:从 Swift 3 开始:
func allowMultipleLines(tableViewCell: UITableViewCell)
tableViewCell.textLabel?.numberOfLines = 0
tableViewCell.textLabel?.lineBreakMode = .byWordWrapping
【讨论】:
.ByWordWrapping
就足够了。【参考方案3】:
有一种方法可以仅使用情节提要来完成此操作。首先,选择单元格并转到右侧面板上的属性部分。第一个选项应该是“样式”。将其从自定义更改为基本。现在,在您的单元格中,您应该会看到显示“标题”的文本。双击它,在右侧面板中应该可以设置行数。
【讨论】:
【参考方案4】:我发现这在 Xcode 版本 8.0 (8A218a) 上对我有用
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) UITableViewCell
let cell = UITableViewCell()
//MARK: word wrapping in cell
cell.textLabel?.text = self.choices[(indexPath as NSIndexPath).row]
cell.textLabel?.numberOfLines=0 // line wrap
cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
return cell
【讨论】:
【参考方案5】:cell.textLabel.numberOfLines = 0
一起
tableView.rowHeight = UITableView.automaticDimension
有效但仅在行数有限(2-3 行)时。
我还必须将单元格字段嵌入StackView
。这让一切变得不同。现在我可以显示任意多的行了。
【讨论】:
以上是关于iOS:具有多行的 UITableView 单元格?的主要内容,如果未能解决你的问题,请参考以下文章