自我调整 UITableViewCells
Posted
技术标签:
【中文标题】自我调整 UITableViewCells【英文标题】:Self sizing UITableViewCells 【发布时间】:2015-10-12 23:08:32 【问题描述】:我一直在尝试开发一个包含自调整大小的表格视图单元格的应用程序。我查阅了很多教程和在线文档,发现了这两行代码:
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = UITableViewAutomaticDimension (and tried with 44 here also)
单元格将按以下方式工作:
用户可以写一些东西并选择是否上传图片。单元格会根据是否存在图像以及文本大小来调整大小。
我的问题是:
我正在使用标签来保存文本,已设置为 0 行。但我不能将文本与左上角对齐。用户可以写的内容是有限制的; 保存图像的UIImageView
也是固定大小的,并且图像的纵横比设置为适合(我想不出更好的解决方案);
我上面显示的代码没有做任何事情。我应该取消选中单元格属性中的某些内容还是执行某些操作?
我应该如何设置约束?标签和UIImageView
?
【问题讨论】:
欢迎来到 ***!如果您有多个问题,则应分别发布。你的帖子有点压倒性。 @NateBarbettini 感谢您的评论!我只是将它们全部发布在一起,因为我认为 1 个处理程序可以解决所有问题。下次会注意的! 【参考方案1】:其实很简单。您必须从上到下设置所有约束,但不要设置任何高度约束。
我的建议是从一个简单的布局开始,看看它是如何工作的。例如:只创建一个UITextView
,行数设置为0
。对于该示例,您只需要 4 个约束:
•V:|-0-[textView]
(从文本视图到超级视图顶部)
•V:[textView]-0-|
(从文本视图到超级视图底部
•水平约束(左右)到超级视图
如果您设法让它工作,请添加UIImageView
。请记住,您有从上到下的所有垂直约束。
V:|-0-[textView]-0-[image]-0-|
不要在任何地方设置高度限制 - 高度将自动从 intrinsicContentSize
方法推断出来。
现在我解释了如何做,我要告诉你不要这样做:) 性能可能会很糟糕 - 忘记 60 FPS,特别是如果你有分页 - 如果你加载接下来的 20 个单元格,它必须计算 20 个高度,而且需要很长时间 => 口吃。我说的是这里的经验。忘记 UITableViewAutomaticDimension
并手动计算所有内容 - 这并不难。
但是自动布局呢?真的像我说的那么慢吗 关于?也许你会感到惊讶,但这是事实。慢得令人难以置信 如果您想在您的应用程序中看到所有实际的完美平滑滚动 生命周期长的设备(尤其是与 android 相比 设备)。而且您拥有的子视图越多,AutoLayout 的工作速度就越慢。
Source
【讨论】:
非常感谢!我会尝试手动完成这项工作。所以我必须为高度标签和 UIImageView 的高度设置一个最大尺寸,并按照它工作吗?谢谢 是的,有很多关于如何计算标签高度的教程。记得缓存你的计算! 非常感谢!最后一件事:在单元格大小检查器上,我可以选择选中和取消选中“自定义”并设置行高。我应该“选中”还是“取消选中”?或者我也应该在表格视图菜单上做任何事情吗?再次感谢! 如果你在代码中返回一个高度,在委托时它会以任何一种方式覆盖它,所以没关系。仅当您不覆盖它时才重要。以上是关于自我调整 UITableViewCells的主要内容,如果未能解决你的问题,请参考以下文章
使用自我调整大小的单元格后,reloadData 不再起作用
自我调整大小的 UITableViewCell 中的 UIlabel 和 UIView 高度计算