swift – 自动增长静态表格视图单元格高度以适合标签内容高度

swift – 自动增长静态表格视图单元格高度以适合标签内容高度,第1张

概述这是我的单元格布局的低质量模型: 静态单元格的初始高度(在故事板中设置)为80.在此单元格内部有两个视图.底部视图的固定高度为40.顶视图具有布局约束以对齐到顶部边距并垂直对齐到底部视图. 顶视图内部是标签(蓝色)和按钮(黄色) 标签还具有对齐到视图顶部并与视图底部对齐的约束.布局和约束背后的想法是,如果我将单元格的高度增加到100,例如,底部视图高度保持为40,顶部视图和标签高度将扩展到60的高 这是我的单元格布局的低质量模型:

静态单元格的初始高度(在故事板中设置)为80.在此单元格内部有两个视图.底部视图的固定高度为40.顶视图具有布局约束以对齐到顶部边距并垂直对齐到底部视图.

顶视图内部是标签(蓝色)和按钮(黄色)

标签还具有对齐到视图顶部并与视图底部对齐的约束.布局和约束背后的想法是,如果我将单元格的高度增加到100,例如,底部视图高度保持为40,顶部视图和标签高度将扩展到60的高度.

我的标签包含换行自动换行和行数设置为0.我现在想要的是自动调整单元格的大小,以便在有多行时显示标签的完整内容.我怎么能这样做?

我试过了:

self.tableVIEw.rowHeight = UItableVIEwautomaticDimension;self.tableVIEw.estimatedRowHeight = 80.0;

这不起作用.单元格高度始终与UILabel中的行数保持独立.

我也尝试过:

overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {    return UItableVIEwautomaticDimension;}

与我的第一种方法结果相同.

我尝试的更复杂的方法如下:

overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {    let heightLabel = self.heightForVIEw(text: self.lblTitle.text!,Font: UIFont(name: "Helvetica Neue",size: 18)!,wIDth: self.lblTime.wIDth);    let heightVIEw = (heightLabel + (80.0 / 2));    print("Title label height \(heightLabel)");    print("Title vIEw height \(heightVIEw)");    if (heightVIEw > 80.0) {        return heightVIEw;    }    return 80.0;}func heightForVIEw(text: String,Font: UIFont,wIDth: CGfloat) -> CGfloat {    let label: UILabel = UILabel(frame: CGRect(x: 0,y: 0,wIDth: wIDth,height: CGfloat.greatestFiniteMagnitude));    label.numberOflines = 0;    label.lineBreakMode = .byWorDWrapPing;    label.Font = Font;    label.text = text;    label.sizetoFit();    return label.frame.height;}

输出:

Title label height 42.5Title vIEw height 82.5

但这似乎也没有用,因为其他行没有出现,只有标签的第一行.

我怎样才能使这个工作?

编辑

我想当我知道标签的宽度时,计算标签高度的方法会起作用.但我怎么知道呢?

解决方法 从个人经验来看,让UItableCells正确增长是iOS中最烦人的事情之一.最大的问题通常是限制.如果它们不完美,细胞就不会生长.

关键是能够从单元格内容视图的顶部到内容视图的底部绘制一条直线.因此,从您的示例常量看起来应该如下所示.

topVIEw.top == contentVIEw.toplabel.top == topVIEw.toplabel.bottom == topVIEw.bottomtopVIEw.bottom == bottomVIEw.topbottomVIEw.height == 40bottomVIEw.bottom == contentVIEw.bottom

如果没有该直线,则布局无法确定标签显示所有内容的正确高度.

因此,您在新的示例项目中寻找的是一个相当简单的版本:

class VIEwController: UItableVIEwController {    @IBOutlet weak var label: UILabel!    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        self.tableVIEw.rowHeight = UItableVIEwautomaticDimension        self.tableVIEw.estimatedRowHeight = 80.0        label.text = "Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incIDIDunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupIDatat non proIDent,sunt in culpa qui officia deserunt mollit anim ID est laborum."    }    overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {        return UItableVIEwautomaticDimension    }}

使用相同的布局:
Layout of Table Cell

结果显示在模拟器中.
Result Image

总结

以上是内存溢出为你收集整理的swift – 自动增长静态表格视图单元格高度以适合标签内容高度全部内容,希望文章能够帮你解决swift – 自动增长静态表格视图单元格高度以适合标签内容高度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存