使用Swift4,iOS11.1,Xcode9.1,
我想实现一个tableView-cell的动态高度变化。问题如下:我的tableView中的每个单元格都包含一个UIView(称为MyCellView)。在用户触摸单元格时,触摸单元格的MyCellView将改变其高度!
我成功实现了一个UIGestureRecognizer,它为我提供了动作。在动作方法中,我改变了触摸细胞的高度(到目前为止一直很好)。视图实际上改变了它的高度。
但不幸的是,如果MyCellView的新高度大于原始单元格高度,则会截断MyCellView!
如何在tableView中动态实现单个单元格的单元格高度变化?
这是我的手势识别器动作代码:
@objc func toWebviewTouch(_ sender : UITapGestureRecognizer) {
self.MyCellView.frame = CGRect(x: self.MyCellView.frame.origin.x,
y: self.MyCellView.frame.origin.y,
width: self.MyCellView.frame.width,
height: self.myNewHeight)
self.contentView.bringSubview(toFront: self.MyCellView)
self.contentView.setNeedsLayout()
self.setNeedsUpdateConstraints()
self.updateConstraintsIfNeeded()
}
我也遵循了这个link的想法。但这只会在tableView填充时改变tableView单元格的高度(而不是在建立tableView并且用户触摸单元格之后)。
任何帮助表示赞赏!
答案 0 :(得分:0)
哦,我找到了解决方案:
在link的帮助下,我实现了目标!
关键是在'didSelectRowAt'
中使用以下内容tableView.beginUpdates()
tableView.endUpdates()
之后,我需要从自定义单元格内部创建通知(即,当用户触摸单元格时,自定义单元格的gestureRecognizer会触发本地通知(将单元格标记为Nr作为传递的消息) - 再次,使tableView.updates()
请参阅我的代码最底层的通知方法 - 例外......
这是我的代码(例外):
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// fixed to three to test...
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = fromToTableView.dequeueReusableCell(withIdentifier: "FromToCell") as? FromToCustomTableViewCell
cell?.configureCell(tag: indexPath.row)
return cell!
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if self.cellIsSelected == indexPath {
return 450
}
return 144
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.cellIsSelected = self.cellIsSelected == indexPath ? nil : indexPath
tableView.beginUpdates()
tableView.endUpdates()
}
// MARK: Notifications methods
@objc func expandCellHeightFromNotification(_ notification: NSNotification) {
if let tag = notification.userInfo?["tag"] as? Int {
self.cellIsSelected = IndexPath(item: tag, section: 0)
}
self.fromToTableView.beginUpdates()
self.fromToTableView.endUpdates()
}
@objc func collapseCellHeightFromNotification(_ notification: NSNotification) {
self.cellIsSelected = nil
self.fromToTableView.beginUpdates()
self.fromToTableView.endUpdates()
}