我在水平堆栈视图中有两个标签。标签的numberOfLines
设置为0,因此它们将无限包装,Vertical Content Compression Resistance设置为1000,因此它们将始终为其全高,Horizontal Compression Resistance设置为250,因为我希望它们能够缩小,和内容拥抱设置为1000(两个轴,因为我总是希望框架拥抱标签)。参见:
然后,该堆栈视图是自定义单元格中的唯一项目。它受限于顶部,底部,前导和尾随边距。堆栈视图具有与标签相同的压缩阻力/内容拥抱。
在运行时,在我的cellForRowAt indexPath函数中,我将两个标签设置为不同长度的文本。既然我在其他地方读到布局可能会成为一个问题,我也会这样做:
cell.contentView.setNeedsLayout()
cell.contentView.layoutIfNeeded()
然而,当我跑步时,我最初看到一些奇怪的行为。但是当我滚动时,事情开始变得好看。似乎问题与细胞重用有关,但我无法弄清楚是什么问题。
在左边 - 初始加载。注意,值标签被完全切断,而在第二个单元格中,比例间距似乎根本不起作用 - 与名称标签相比,值标签非常窄。
在右侧 - 表格一旦滚动到列表底部并返回顶部。这正是我所期望的:标签根据其内在内容大小按比例间隔。但是,如何在不必滚动的情况下获得此行为?
答案 0 :(得分:0)
我相信您最大的问题是使用Horizontal StackView,您的宽度是根据堆叠的内容动态计算的。将StackView限制为特定宽度,根据宽度约束,更大的工作就是如何计算内容的宽度。然后你投入无限的线条,这使得动态宽度更具挑战性,因为必须有一些门槛。
我建议为FieldName或FieldValue定义一个宽度,可以是基于父宽度百分比的常量或相对宽度。我非常确定你的拥抱和压缩只会互相争斗,因为FieldName有时会比FieldValue长,有时它恰恰相反。
你必须在某处设置硬限制。