我试图在具有特定单元格布局的UITableView中使用动态高度。考虑以下该布局的说明性表示:
我有水平约束正常工作(两边15px,它们之间15px,宽度相等)但是我在垂直约束下挣扎。以下是此布局的垂直要求:
为此,到目前为止,我的约束方式是:
第三点是因为第二点一起只定义了超视图的最小高度(黄色),但不是最大值。从理论上讲,如果它的高度为10,000,它仍然可以满足这些约束条件。
我的想法是将其内容设置为“必需”'在不违反其他约束条件的情况下,将使superview尽可能短,因此无论何时,绿色矩形或蓝色矩形都将距离边缘15 px,具体取决于较高者。然而,身高仍然似乎已经延伸到了#39;如此处所见......
注意:内侧视图正确垂直居中,并正确保持与顶部/底部边缘的最小距离。我试图解决的问题是限制超视图的高度尽可能小。
我似乎没有得到任何含糊不清的约束信息(我在日志中看不到任何内容,但我相信我应该是因为再次< =约束不是'他们自己就足够了,所以我不确定如何使用工具来调试这个,或者找出哪个约束正在推动这个高度。
那么,有人可以帮忙吗?
P.S。为了确保它不是单元格外部的东西,比如忘记为UITableView配置自动高度,我删除了两个矩形,并用一个固定到所有四个边缘的简单多线标签替换它们。当我用它运行它时,单元格的大小正如预期的那样缩小。我提出这个问题可以避免提出可能存在问题的答案。
答案 0 :(得分:0)
阅读您提供的要求我添加了以下限制:
出于演示目的,我使用了一个简单的视图容器而不是单元格。由于内盒将具有从外部导出的内在内容大小,因此我采用了标签来模仿它。
重申一下,增加的限制是:
<强>水平强>
<强>垂直强>
我设定了号码。两个标签的行属性为零,以便它们可以在运行时生长。
在运行时,我更改了其中一个标签和框的文本,容器也相应增长。
刷新单元格高度实现heightForRow方法并提供最新高度。一个典型的代码片段看起来像这样(假设您已经初始化了单元格):
cell.needsUpdateConstraints()
cell.updateConstraintsIfNeeded()
cell.contentView.setNeedsLayout()
cell.contentView.layoutIfNeeded()
let height = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height + 1
return height
希望这会有所帮助。
答案 1 :(得分:0)
好的,所以我在内容拥抱时朝着正确的方向前进,但处理此问题的正确方法是在黄色视图0和低优先级上指定高度约束。我用100甚至低于默认的250.当我这样做时,求解器试图尽可能接近零,同时仍然尊重其他约束,因此“拥抱”内容。仍然不知道为什么内容拥抱本身不起作用,但这解决了这个问题。