如何交互式收缩和增长 Table View Cell?

Posted

技术标签:

【中文标题】如何交互式收缩和增长 Table View Cell?【英文标题】:How to interactively shrink and grow Table View Cell? 【发布时间】:2020-07-18 19:58:13 【问题描述】:

我在表格视图中有单元格,用户可以在其中选择“显示更多”,并且可以展开视图以显示更详细的信息。相反,用户可以选择“隐藏”,视图会缩小到原来的大小。

这可能吗?这是我已经尝试过的扩展功能的简化版本:

UITableViewCell 内部:

//MARK: Views
let lbl: UILabel =  
    let lbl = UILabel()
    lbl.text = "Initial text."
    lbl.translatesAutoresizingMaskIntoConstraints = false
    lbl.numberOfLines = 0
    return lbl
()

//MARK: Helper functions
func configureViewComponents() 
    selectionStyle = .none

    addSubview(lbl)
    lbl.anchor(top: topAnchor, left: leftAnchor, bottom: bottomAnchor, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0)

在我的 VC 中配置表格视图:

func configureViewComponents() 
    view.addSubview(tableView)
    
    tableView.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, paddingTop: 10, paddingLeft: 0, paddingBottom: 0, paddingRight: 0)
    tableView.widthAnchor.constraint(equalToConstant: view.frame.width).isActive = true
        
    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 100
    

    tableView.allowsSelection = true
    tableView.isUserInteractionEnabled = true
    
    
    tableView.delegate = self
    tableView.dataSource = self
    
    
    tableView.separatorStyle = .none
    tableView.register(EventCell.self, forCellReuseIdentifier: "EventCell")
    
    
    view.bringSubviewToFront(tableView)

委托方法:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    1



func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
    return UITableView.automaticDimension


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let cell = tableView.cellForRow(at: indexPath) as! EventCell
    //Do: expand functionality
    cell.lbl.text! += " aasdlfkajsdf;lksadj;flaskdfj;alskdjfa;sldkfj;alskdfj;asldkfjas;dlfkasjd;falskdfja;sdlkfajsd;flkasjdfl;askdf;jasldkfajs;dlfjak;sdasdf"


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    if let cell = tableView.dequeueReusableCell(withIdentifier: "EventCell", for: indexPath) as? EventCell 
        return cell
    
    return EventCell()

我错过了什么吗?

【问题讨论】:

“这可能吗?”是的。 “我错过了什么吗?”我不知道。也许,怎么做? @matt 看到答案 我已经有办法了。见github.com/mattneub/Programming-ios-Book-Examples/blob/… 【参考方案1】:

想通了。虽然我以编程方式创建视图,但您应该将 lbl.translatesAutoresizingMaskIntoConstraints 设置为 TRUE。另外,在展开标签文本后调用 tableView.reloadData()。

有谁明白为什么需要这两个来扩大单元格高度以适应新扩大的标签?

【讨论】:

请不要在答案栏中提问。 @matt 为什么?我们是否担心它可能会帮助社区更好地理解解决方案? 因为这是一个答案,而不是一个问题。如果您仍然有问题,请随时提出新问题(或编辑现有问题)。我的意思是,例如,我确实对此有所了解,所以我可以回复,但现在没有地方可以回复。

以上是关于如何交互式收缩和增长 Table View Cell?的主要内容,如果未能解决你的问题,请参考以下文章

在一行中设置两个宽度相等的折叠列,其中一个中心列收缩和增长以适应内容

jquery 展开收缩table

如何清除SQLserver 日志

SQL server怎样修改主日志文件的增长上线

如何清除SQLserver 日志

怎样在SQL Server 2000中收缩数据库