动态设置 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 位于右下角)当我查看每个图像视图的约束时,每一侧都是占。
任何帮助将不胜感激!谢谢。
【问题讨论】:
您需要发布示例 - 我的意思是图片 - 您遇到的问题。这个:“目前,我的问题是图像内容正在运行到以下单元格。”完全不清楚伙计。不要犹豫,发布一个或多个完整示例来说明您的问题。 好的,我现在将编辑我的问题并添加一些屏幕截图。一开始我很含糊! 只有一个非常笼统的观点,肖恩。请注意,在大型滚动视图中真正完全动态的单元格和表格(或者现在,集合视图 - 不再使用表格)是 ios 和 android 编程中最难的事情!就像,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 高度