Swift,自动调整自定义表格视图单元格大小

4
在我的应用程序中,我有一个表视图,每个单元格中都有一个图像、标签和文本视图。我想能够根据文本视图中的内容量自动调整单元格的大小。(文本视图是最下方的文本。)
到目前为止,我已经添加了正确的约束:文本视图的前导、后续、顶部和底部,并禁用了滚动和编辑。
在我的tableViewController.swift文件中,我编写了以下代码:
override func viewWillAppear(_ animated: Bool) { tableView.estimatedRowHeight = 100 tableView.rowHeight = UITableViewAutomaticDimension }
然而,当我向文本视图添加更多文本时,它并没有起作用,只是截断了。
也许这与卡片式外观有关,我在每个单元格中都有一个UIView充当卡片。
我真的不知道我做错了什么。
下面是我的应用程序的图片,如果有人能帮忙,将不胜感激。

enter image description here


你在Interface Builder中为你的UITextView设置了Content Mode为“Scale To Fill”吗? - Barns
我发现如果我有多个textView,这个自动调整大小很难使用,我总是自己计算高度。 - Fangming
我很想知道您是如何在单元格之间创建这些空间和圆形形状的。 - codejockie
我在每个单元格中创建了一个UIView。然后将每个单元格的内容放入该UIView中。视图的每侧都有8像素的空间。为了使角落变圆,我使用了myView.cornerRadius = int。 - Luke Roberts
4个回答

11

检查您的约束是否像这样(基于您的图像):

imageView:设置为容器顶部和前导,具有固定高度和宽度值。

label:可以将其设置为图像的顶部和水平间距,高度和宽度也是固定的。

textView:前导到图像,顶部空间到标签,后续和底部到容器。

并继续使用

tableView.estimatedRowHeight = 100
        tableView.rowHeight = UITableViewAutomaticDimension

在你的viewWillAppear()函数中


7

Swift 4.2更新说明

使用方法:

UITableView.automaticDimension

改为:

UITableViewAutomaticDimension

5

请确保将内容模式设置为UITextViewScale To Fill

确保UITextView和卡片UIView没有高度约束

尝试在viewDidLoad中添加预估高度:

override func viewDidLoad() {
    tableView.estimatedRowHeight = 100
    tableView.rowHeight = UITableViewAutomaticDimension
}

也许AutoHeight不起作用是因为UITextView上方有一个UIView。尝试在cellForRowAt中为UIView调用sizeToFitlayoutIfNeeded方法:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier", for: indexPath) as! CustomTableViewCell
    cell.vwCard.sizeToFit()
    cell.vwCard.layoutIfNeeded()
    return cell
}

您还可以尝试使用sizeToFitlayoutIfNeeded来调整UITextView的大小。希望这能够解决问题……

我已经尝试了以上所有方法,甚至尝试删除背景卡视图,但仍然无法解决问题。还有其他的想法吗?非常抱歉@Abadii176。 - Luke Roberts
您的应用程序的部署目标是什么,您的模拟器运行哪个iOS版本? - Abadii176
部署版本为10.0,模拟器版本为10.3.1。 - Luke Roberts
如果您为 heightForRowAt 设置了 delegate,会发生什么情况:override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 100; } - Abadii176

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接