单击查看更多按钮时文本视图展开或收缩

Posted

技术标签:

【中文标题】单击查看更多按钮时文本视图展开或收缩【英文标题】:Text View expand or contract upon clicking see more button 【发布时间】:2017-10-04 11:09:09 【问题描述】:

在我的 tableView 单元格中,我有一个 textView,我通过 JSON 获取其字符串并像这样动态更新单元格高度

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    if indexPath.section == 0 
        return 255
    
    return UITableViewAutomaticDimension

这是截图

现在,最初我希望文本视图显示一些文本,单击查看更多按钮时,它应该展开,并且在展开时,如果字符串的长度只是几行,则按钮文本也应该更改为查看更少,查看更多按钮应该隐藏。我遇到的解决方案涉及UILabel,我不能使用它,因为这样单元格的高度就不会变成动态的。也没有像 numberOfLines 这样的 textView 属性,所以我可以使用它。请指出我应该做的正确方向。

【问题讨论】:

【参考方案1】:
extension String 

  func customHeight(constraintedWidth width: CGFloat, font: UIFont) -> CGFloat 
    let label =  UILabel(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.text = self
    label.font = font
    label.sizeToFit()

    return label.frame.height



像下面的代码一样使用这个扩展,

let height = item.yourText.customHeight(constraintedWidth: cell.textView.bounds.width, font: UIFont.systemFont(ofSize: 17, weight: UIFontWeightSemibold))
cell.textViewHeightConstraint.constant = (height)

请尝试使用上述扩展方法,您可以在其中传递文本视图的宽度和字体。此方法将动态设置文本视图的高度。还可以使用您自己的逻辑来计算“查看更多”和“查看更少”按钮会发生什么。

【讨论】:

以上是关于单击查看更多按钮时文本视图展开或收缩的主要内容,如果未能解决你的问题,请参考以下文章

Android 实现视图文本TextView的展开与收缩功能

无法在iOS 11 Swift中平滑地展开文本视图

通过单击或滑动手势(Android)展开/折叠 CardView?

使用 Instagram 等“更多”按钮在 UITableView 中展开 UILabel

在表格视图单元格按钮上查看表格视图单元格文本

Xcode 单击时折叠视图或元素