更新
我在最新的调查发现后完全修改了问题。
目标
我的目标是实现以下效果:
- 有一个简单的表格视图
- 用户选择一行
- 所选行展开,下面出现另一个标签
请注意,我知道可以通过在所选的行下方插入/删除单元格来实现此目的,我已经成功使用该方法进行了实现。
这次,我想尝试使用自动布局约束来实现。
当前状态
我有一个示例项目供任何人检查,并且打开了一个问题。总结一下,这是我迄今为止尝试过的方法:
这里有以下视图:
- 单元格的内容视图
- 顶部视图,包含主标签 ("main view")
- 底部视图,在主视图下方,包含最初隐藏的标签 ("detail view")
我已经在我的单元格内设置了自动布局约束(请注意,这是严格的伪代码):
- mainView.top = contentView.top
- mainView.leading = contentView.leading
- mainView.trailing = contentView.trailing
- mainView.bottom = detailView.top
- detailView.leading = contentView.leading
- detailView.trailing = contentView.trailing
- detailView.bottom = contentView.bottom
- detailView.height = 0
我有一个自定义的 UITableViewCell
子类,具有多个输出口,但最重要的是上面提到的高度约束的输出口:这里的想法是默认情况下将其 constant
设置为 0,但当选中单元格时,将其设置为 44,使其可见:
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
detailViewHeightConstraint.constant = selected ? detailViewDefaultHeight : 0
UIView.animateWithDuration(0.3) {
self.layoutIfNeeded()
}
}
我得到了以下结果:
所以这个效果是有效的,但不完全符合我的最初想法。我想让单元格的高度在显示详细视图时增加,并在隐藏详细视图时恢复原状。
我已经在运行时检查了我的布局层次结构:
- 初始状态是正常的。内容视图的高度等于我的主视图的高度(在本例中为125点)。
- 当选择单元格时,详细视图的高度约束增加到44点,并且两个视图垂直堆叠。但是,主视图缩小了,而不是单元格内容视图扩展。
问题
我需要的是:表视图单元格内容视图的高度应等于
- 当详细视图的高度约束为0时,主视图的高度(当前有效)
- 当详细视图的高度约束正确设置时,主视图高度+详细视图高度(当前无效)。
我该如何设置约束以实现这一点?