动态设置 UITableViewCell 的高度来包裹内容

Posted

技术标签:

【中文标题】动态设置 UITableViewCell 的高度来包裹内容【英文标题】:Dynamically set the height of UITableViewCell to wrap content 【发布时间】:2015-05-12 19:43:44 【问题描述】:

我正在尝试在 UITableView 中显示 3 个图像视图以及 UILabel 中的一些附加信息。附上一张我的 Cell Prototype 的图片:

目前,我的问题是图像内容正在运行到以下单元格。在我测试时,我目前只加载 3 个中最大的图像(我从服务器中拉出它们,从最大到最小预先排序——我还要注意图像将受到各种尺寸限制)。

我的问题是,虽然它的宽度正常工作,但它的高度却越过指标标签并进入下一个单元格。

我现在知道,为了使其工作,必须正确配置自动布局约束。但是,我对此很陌生,并且遇到了一些麻烦。

首先,我将尝试准确解释我想要完成的任务:

    描述标签应该跨越整个表格单元格。

    为此,我已将前导、顶部和尾随空格固定到超级视图

    我希望右上角和左上角的图像都位于描述标签的正下方。为此,我已经:

    将右上角图像的前导空间固定到超级视图 将左上角图像的尾随空间固定到超级视图 将两个图像的顶部空间固定到描述标签 固定这两个图像之间的水平间距

    我希望右下角直接在右上角,为此,我已经:

    将右下角图像的前导空间固定到超级视图 将右下图像的顶部空间固定到右上图像

    我希望指标标签显示在左上角图像下方,为此,我已经:

    将此标签的顶部空间固定到左上角的图像 将指标的底部和尾部边缘固定到超级视图 将指标的前导空间固定到右下角的图像。

我确定我在这里做错了什么,我不应该在任何时候将子视图相互固定吗?

另外,对于我对这个问题的介绍,我深表歉意。下面是我收到的警告的图像(供您参考,图像 1 位于右上角,图像 2 位于左上角,图像 3 位于右下角)当我查看每个图像视图的约束时,每一侧都是占。

任何帮助将不胜感激!谢谢。

【问题讨论】:

您需要发布示例 - 我的意思是图片 - 您遇到的问题。这个:“目前,我的问题是图像内容正在运行到以下单元格。”完全不清楚伙计。不要犹豫,发布一个或多个完整示例来说明您的问题。 好的,我现在将编辑我的问题并添加一些屏幕截图。一开始我很含糊! 只有一个非常笼统的观点,肖恩。请注意,在大型滚动视图中真正完全动态的单元格和表格(或者现在,集合视图 - 不再使用表格)是 iosandroid 编程中最难的事情!就像,Facebook 遇到了麻烦。许多微妙的问题没有答案。 (就像我在另一条评论中的挑战一样,你如何处理一个极端的图像?谁知道。) 出现了许多通常很棘手的问题。一般棘手的问题.. ***.com/questions/20238559 甚至不提及最终您将不得不处理“略读”和“延迟加载”问题。 ***.com/questions/25747696 当然还有加载“无限”列表的整个一般问题。当您作为用户随意“无限”地在您的 facebook 猫照片页面上向后滚动时,这就像“真正的工程”。你知道?在处理如此巨大的卷轴时,甚至不要提及编辑、删除项目等。 我已经更新了我的问题,并试图更清楚地解释事情。至于边缘情况(如瘦图像)——将在此提要中呈现的任何图像都将受到某些限制(即最小尺寸)。如果您需要更多信息,请告诉我! 【参考方案1】:

尝试将此代码添加到您的 viewDidLoad:

override func viewDidLoad() 
    super.viewDidLoad()
    tableView.estimatedRowHeight = tableView.rowHeight
    tableView.rowHeight = UITableViewAutomaticDimension

【讨论】:

是的——正如我在上面的问题中所指定的,我已经完成了这两件事。似乎仍然不适合我。唯一的区别是我设置了 tableView.estimatedRowHeight = 而不是 tableView.rowHieght——这样可以解决问题吗? tableView.estimatedRowHeight = tableView.rowHeight 将自动从情节提要中获取值。确保您的约束设置正确(原型单元的顶部和底部) 我回家后会确认这一点,但我认为没有任何自动布局警告,并且在情节提要中,约束线都是蓝色的(我很确定这一点,但会重新检查) 所以我仔细检查了我的约束,我很确定它们是正确的——至少,不会产生任何警告。我怎样才能确定我是否正确设置了它们? 你仔细地把所有的截图都贴在这里:)

以上是关于动态设置 UITableViewCell 的高度来包裹内容的主要内容,如果未能解决你的问题,请参考以下文章

根据单元格高度在 UITableViewCell 内动态设置 UIImageView 高度

UITableViewCell,使用多个标签设置动态高度

UITableViewCell 的高度如何设置

UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度

动态高度 UITableViewCell 闪烁

在动态高度 UITableViewCell 出现后更改其高度