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

UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度

IOS:具有自定义 uitableviewcell 的动态高度