如何交互式收缩和增长 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?的主要内容,如果未能解决你的问题,请参考以下文章