我在水平堆栈 View 中有两个标签。标签将 numberOfLines 设置为 0,因此它们将无限换行,垂直内容压缩阻力设置为 1000,因此它们将始终是它们的全高,水平压缩阻力设置为 250,因为我希望它们能够被缩小,并且 Content Hugging 设置为 1000(两个轴,因为我总是希望框架拥抱标签)。见:
Interface Builder screenshot
那么堆栈 View 是自调整单元格中的唯一项目。它被限制在顶部、底部、前导和尾随边距。堆栈 View 具有与标签相同的压缩阻力/内容拥抱。
在运行时,在我的 cellForRowAt indexPath 函数中,我将两个标签设置为不同长度的文本。而且由于我在其他地方读到过这里的布局可能是一个问题,所以我也这样做:
cell.contentView.setNeedsLayout()
cell.contentView.layoutIfNeeded()
但是,当我运行时,我最初看到了一些奇怪的行为。但是当我滚动时,事情开始看起来不错。似乎问题与细胞重用有关,但我不知道出了什么问题。
Simulator Screen Shots
在左侧 - 初始负载。请注意,值标签被完全切断,在第二个单元格中,比例间距似乎根本不起作用 - 与名称标签相比,值标签非常窄。
在右侧 - 我滚动到列表底部并返回顶部后的表格。这正是我所期望的:标签根据其内在内容大小按比例排列。但是我怎样才能在不滚动的情况下获得这种行为呢?
Best Answer-推荐答案 strong>
我相信您最大的问题是水平 StackView,您的宽度是根据堆叠的内容动态计算的。将 StackView 限制为特定宽度,根据您的宽度限制,更大的工作变成了如何计算内容的宽度。然后你会抛出无限的线条,这使得动态宽度更具挑战性,因为必须有一些阈值。
我建议为 FieldName 或 FieldValue 定义一个宽度,无论是常量还是基于父宽度百分比的相对宽度。我很确定你的拥抱和压缩只会互相争斗,因为 FieldName 有时可能比 FieldValue 长,有时恰恰相反。
您必须在某处设置硬限制。
关于ios - 在自定尺寸单元中按比例分布的 UIStackView,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/43351901/
|