我在水平堆栈视图中有两个标签。标签有numberOfLines
设置为0,因此它们将无限包裹,垂直内容压缩电阻设置为1000,因此它们将始终是它们的全高,水平压缩电阻设置为250,因为我希望它们能够缩小,并且内容拥抱设置到1000(两轴,因为我总是希望框架拥抱标签)。请参阅:按比例分布的UIStackView在自定尺寸的单元格中
然后该栈的观点是在自上浆细胞的唯一项目。它受限于顶部,底部,顶部和尾部边距。堆叠视图与标签具有相同的抗压缩/内容拥抱。
在运行时,在我的cellForRowAt indexPath函数中,我将两个标签设置为不同长度的文本。而且,因为我已经在别处读到布局可以是一个问题在这里,我也做:
cell.contentView.setNeedsLayout()
cell.contentView.layoutIfNeeded()
然而,当我跑,我开始看到一些奇怪的行为。但是当我滚动时,事情开始看起来没问题。看起来问题与细胞再利用有关,但我无法弄清楚什么是错误的。
在左侧 - 初始负载。请注意,价值标签被完全切断,而在第二个单元格中,比例间距似乎根本不起作用 - 与名称标签相比,值标签非常窄。
在右侧 - 表格滚动到列表底部并返回顶部。这正是我所期望的:标签是根据其内在内容大小按比例分配的。但是我怎样才能得到这种行为,而不必滚动?
您是如何计算标签宽度的?因为在上面的例子中,右标签非常窄(单词“No”的宽度)......但在下面的例子中,右标签宽于50%...... – DonMag
@DonMag - 根据Apple的关于堆栈视图的文档,当您按比例选择fill的分布属性时,“视图将根据堆栈视图轴上的内在内容大小按比例调整大小。” 所以我期望的是根据标签的内在内容大小来计算宽度。当单元格被重用时,这似乎工作正常,但在单元格第一次加载时似乎没有问题。 –
肯定...除了内容大小是什么?对于单个标签,默认字体为17,“水果蛋糕”文本的*固有内容大小*本身为“528 x 20.5”...如果限制宽度 - 通过在标签上设置约束或将其嵌入到具有宽度约束的堆栈视图中,则会将其包装为多行(如果需要),并且*内在高度*将更改...但是如果你有两个标签,你希望获得哪个内在高度? – DonMag