Ios 使用UITableViewAutomaticDimension后所有行的高度都相同

Ios 使用UITableViewAutomaticDimension后所有行的高度都相同,ios,uitableview,autolayout,uitableviewautomaticdimension,Ios,Uitableview,Autolayout,Uitableviewautomaticdimension,我试图根据单元格中标签中的文本行,使表中的所有行都有自己的行高。我的出发点是这里的Wenderlich教程: 我使用的方法是UITableViewAutomaticDimension,如下所示。但由于某种原因,当我运行模拟时,所有行的高度都相同。我在代码中为估计的行高输入了什么数字,或者在序列图像板的表视图单元格中为行高输入了什么数字,这似乎并不重要。所有行的高度总是相同的 我错过了什么?谢谢大家 import UIKit class LoLFirstTableViewController:

我试图根据单元格中标签中的文本行,使表中的所有行都有自己的行高。我的出发点是这里的Wenderlich教程:

我使用的方法是
UITableViewAutomaticDimension
,如下所示。但由于某种原因,当我运行模拟时,所有行的高度都相同。我在代码中为估计的行高输入了什么数字,或者在序列图像板的表视图单元格中为行高输入了什么数字,这似乎并不重要。所有行的高度总是相同的

我错过了什么?谢谢大家

import UIKit

class LoLFirstTableViewController: UITableViewController {

    var tasks:[Task] = taskData

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

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tasks.count
    }

    @IBAction func cancelToLoLFirstTableViewController(_ segue:UIStoryboardSegue) {
    }

    @IBAction func saveAddTask(_ segue:UIStoryboardSegue) {
        if let AddTaskTableViewController = segue.source as? AddTaskTableViewController {

            if let task = AddTaskTableViewController.task {
            tasks.append(task)

                let indexPath = IndexPath(row: tasks.count-1, section: 0)
                tableView.insertRows(at: [indexPath], with: .automatic)
            }
        }
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
    -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath)
        as! TaskCell
        let task = tasks[indexPath.row] as Task
            cell.task = task
        return cell
        }
}
`

标签上没有任何约束,因此标签上没有任何内容会导致其他内容发生变化。在标签上没有约束的原因是,您正在使用堆栈视图执行所有操作。但是堆栈视图的大小不会从内到外神奇地调整。因此,他们完全妨碍了你


我建议完全取消堆栈视图。现在,您将能够以正常方式执行此操作,并且它将起作用。

您对标签没有任何约束,因此标签不会导致任何其他更改。在标签上没有约束的原因是,您正在使用堆栈视图执行所有操作。但是堆栈视图的大小不会从内到外神奇地调整。因此,他们完全妨碍了你


我建议完全取消堆栈视图。现在,您可以以正常的方式执行此操作,并且可以正常工作。

显示单元格时,您一定有错误的自动布局约束。您是否有单元格大小不同的内容?关于“我在代码中为估计行高输入了多少数字,或者在序列图像板的表视图单元格中为行高输入了多少数字,这似乎并不重要”;在确定自动调整单元格的最终高度时,这两件事都不重要。是的,内容的大小应该不同于单元格。我的示例文本从一行到三行不等。我附上了我的约束和模拟器当前输出的屏幕截图。谢谢乌梅尔和康纳!如果要显示单元格,则必须有错误的自动布局约束。是否有单元格大小不同的内容?关于“我在代码中为估计行高输入了多少数字,或者在序列图像板的表视图单元格中为行高输入了多少数字,这似乎并不重要”;在确定自动调整单元格的最终高度时,这两件事都不重要。是的,内容的大小应该不同于单元格。我的示例文本从一行到三行不等。我附上了我的约束和模拟器当前输出的屏幕截图。谢谢乌梅尔和康纳!这是一个可下载的项目,它根据标签中的文本量调整单元格大小。您可以下载并运行它,您将看到它确实有效。太棒了,非常感谢,马特!那么,我如何在右边的复选框按钮中添加回去,而不在堆栈视图中添加回去呢?只需在右边放置一个复选框按钮。它可以是附件视图,也可以像标签一样将其添加为
contentView
的子视图。关键是要正确设置约束条件。您可能希望该对象垂直居中,具有高度和宽度约束,并定位在其superview的右边缘。-不管怎么说,堆栈视图在表视图单元格中看起来确实有些过分。这是一个可下载的项目,它根据标签中的文本量来调整单元格大小。您可以下载并运行它,您将看到它确实有效。太棒了,非常感谢,马特!那么,我如何在右边的复选框按钮中添加回去,而不在堆栈视图中添加回去呢?只需在右边放置一个复选框按钮。它可以是附件视图,也可以像标签一样将其添加为
contentView
的子视图。关键是要正确设置约束条件。您可能希望该对象垂直居中,具有高度和宽度约束,并定位在其superview的右边缘。-不管怎样,堆栈视图在表视图单元格中看起来确实有些过分了。