我创建了一个UITableView,其中的单元格在您点击时会展开。它模拟了以下项目:https://github.com/rushisangani/TableViewCellExpand
基本上,单元格容器视图有两个子视图,用作扩展/收缩状态的容器 - "前面"并且"返回",每个都被约束到单元格的主要内容视图的顶部,底部,前导和后沿。为了使单元格展开或收缩,我只需在前视图和后视图的底部约束上切换isActive属性。这是有效的,但只有在我点击它时重新加载单元格。如果我只是更改约束然后尝试调用invalidateIntrinsicContentSize(),则不会发生任何事情。
class DateSelectionTextField: UITextField {
var datePickerView: UIDatePicker!
var dateString: String? {
willSet {
self.text = newValue
}
}
func createPickerView(dateFormatter: String) {
datePickerView = UIDatePicker(frame: CGRectZero)
if dateFormatter == "MM/dd/yyyy" {
datePickerView.minimumDate = displayDateForDateOfBirth("01/01/1940")
datePickerView.maximumDate = displayDateForDateOfBirth(displayStringForDateOfBirth(NSDate())!)
} else if dateFormatter == "yyyy/MM/dd" {
datePickerView.minimumDate = displayDateForTransaction("01/01/1940")
datePickerView.maximumDate = displayDateForTransaction(displayStringForTransaction(NSDate()))
}
datePickerView.datePickerMode = .Date
datePickerView.addTarget(self, action: #selector(dateValueChanged), forControlEvents: UIControlEvents.ValueChanged)
self.inputView = datePickerView
}
func dateValueChanged() {// Date action for date picker view
dateString = displayStringForDateOfBirth(datePickerView.date)
}
}
幕后发生了什么?为什么不重新加载单元格会重新计算其大小?
答案 0 :(得分:2)
如果要根据内在内容大小收缩/扩展单元格,则需要执行以下3个步骤:
配置表格视图:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44
对于静态表视图控制器,您需要实现heightForRowAtIndexPath
并返回UITableViewAutomaticDimension
。
更新单元格约束以反映合同/扩展状态
请求表格视图反映更改:
tableView.beginUpdates()
tableView.endUpdates()