动态调整 UITableViewCells 的大小
Posted
技术标签:
【中文标题】动态调整 UITableViewCells 的大小【英文标题】:Dynamically sizing UITableViewCells 【发布时间】:2018-04-26 11:11:20 【问题描述】:我以前曾使用过动态调整UITableViewCell
的大小。但目前我面临一个问题陈述,我无法使用 autolayout
实现动态调整大小
我的单元格包含三个组件,即一个UIImageView
,两个UILabel
单元格的结构如下
UIImageView
在我的情况下必须具有固定的宽度和高度 60X60
UIImageView
将在UITableViewCell
内垂直居中
UIImageView
的leading constraint
来自15
,来自UITableViewCell
现在两个UILabels
是垂直放置的
两个标签都可以具有动态高度,我希望它们使用autolayout
推动扩展单元格,但我只能实现保持顶部UILabel
的高度不变,而下面的UILabel
高度增加。
我希望UILabel
垂直扩展并增加UITableViewCell
. 的大小
【问题讨论】:
您可能需要找到String
的高度并手动调整UILabel
和UITableViewCell
的大小。
尝试将两个标签约束的高度都设置为大于或等于。
Multiline UILabel
s 和自动布局不能很好地结合在一起。对于这类布局,我通常使用手动布局。
正如@SagarShirbhate 所说,一种选择是计算标签应具有的高度 - 我会为第一个 UILabel 执行此操作,我将为第二个使用动态高度。它应该可以正常工作。
【参考方案1】:
只需对两个标签都使用 StackView 并将两个标签 numberOfLine
设为 0,换行符应为 WordWrap.
为堆栈视图提供 前导、尾随、顶部和底部约束。标签之间的间距为 xcode 详细信息面板上的 stackview 提供间距。
【讨论】:
如果Stack View
可用,这是一个很好的解决方案。但不是Stack View.top
和Stack View.bottom
使用“幻数38.5”(这就是它在Xcode 中不发出警告的原因)使用标准值,而是将底部边距设置为Greater Than or Equal
。请注意,图像的高度和宽度应设置为满足约束条件。
我的应用程序支持 ios 8.0 或更高版本,因此我无法使用 UIStackView。【参考方案2】:
有关约束的设置,请参阅屏幕截图。 使用常量 greaterthanEqualTo 为标签添加一个高度约束一个固定值(参见屏幕截图 2)。并将 lines 设置为 0。在表视图中 heightForRowAt indexPath 将其设置为 UITableViewAutomaticDimension 。
【讨论】:
以上是关于动态调整 UITableViewCells 的大小的主要内容,如果未能解决你的问题,请参考以下文章
具有大小类的自调整 UITableViewCells 中的多行 UILabel - iOS 8 和 Swift
屏幕外 UITableViewCells(用于大小计算)不尊重大小类?