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