uitableviewcell 具有动态高度或减小字体大小以将多行放入一个单元格
Posted
技术标签:
【中文标题】uitableviewcell 具有动态高度或减小字体大小以将多行放入一个单元格【英文标题】:uitableviewcell with dynamic height or reduced font size to fit multiple lines into one cell 【发布时间】:2017-06-09 17:07:11 【问题描述】:我对 Swift 很陌生,正在开发我的第一个 Swift 应用程序。
我有一个带有多行单元格的表格视图,如果需要,它需要适合长文本。
我的代码是:
cell.textLabel!.text = celltextname
cell.textLabel?.numberOfLines = 0
cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
如您所见,多行有效,但文本溢出单元格。
在这种情况下,我需要动态增加单元格高度,或者减小文本大小以适应单元格。
我该怎么做?
【问题讨论】:
见这里:***.com/questions/18746929/… 【参考方案1】:如果你想让你的文本适合单元格,你可以使用这个:
cell.textLabel?.adjustsFontSizeToFitWidth = true
如果你想根据文本高度调整单元格的高度,你可以使用这个:
func getTextViewHeight(text: String, font: UIFont) -> CGFloat
let textSize: CGSize = text.size(attributes: [NSFontAttributeName: font])
var height: CGFloat = (textSize.width / UIScreen.main.bounds.width) * font.pointSize
var lineBreaks: CGFloat = 0
if text.contains("\n")
for char in text.characters
if char == "\n"
lineBreaks += (font.pointSize + 12)
height += lineBreaks
return height + 60
所以你基本上在 heightForRowAt
函数中使用它并计算每个单元格的高度。
更新: 计算高度:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return getTextViewHeight(text: array[indexPath.row], font: UIFont.systemFont(ofSize: 14))
array
是您拥有的数据源。
【讨论】:
我认为改变单元格的高度是更好的解决方案。如何从 heightForRowAt 调用此函数并将文本字符串传递给此函数? @Richard,我同意。查看更新以获取有关如何使用getTextViewHeight
的说明以上是关于uitableviewcell 具有动态高度或减小字体大小以将多行放入一个单元格的主要内容,如果未能解决你的问题,请参考以下文章
具有动态高度的 UITableViewCell 内的 UITableView
具有动态内容、动态布局和动态高度的 UITableViewCell
具有动态高度的 UITableViewCell 中的多个 UILabel
具有动态高度的 UITableViewCell 中的 UILabel