【发布时间】:2015-05-06 13:29:22
【问题描述】:
更新
根据我的最新发现,我已经彻底修改了这个问题。
目标
我的目标是实现如下效果:
- 有一个简单的表格视图
- 用户选择了一行
- 所选行展开,在原始标签下方显示另一个标签
请注意,我知道,这可以通过在所选单元格I already have a successful implementation using that method 下方插入/删除单元格来实现。
这一次,我想尝试使用自动布局约束来实现这一点。
当前状态
我有一个sample project available for anyone to check,还有一个opened an issue。总而言之,这是我迄今为止尝试过的:
作为演员,我有以下看法:
- 单元格的内容视图
- 顶视图,包含主标签(“主视图”)
- 主视图下方的底视图,包含最初隐藏的标签(“详细视图”)
我已经通过以下方式在我的单元格中设置了自动布局约束(请注意,这是严格的伪语言):
- 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 时(目前有效)
- 当详细视图的高度约束设置正确时,主视图高度 + 详细视图高度(这不起作用)。
我必须如何设置约束才能实现这一目标?
【问题讨论】:
标签: ios uitableview autolayout ios-autolayout