使用 UITableViewAutomaticDimension 后行高度相同

Posted

技术标签:

【中文标题】使用 UITableViewAutomaticDimension 后行高度相同【英文标题】:Rows all same height after using UITableViewAutomaticDimension 【发布时间】:2017-01-16 23:11:48 【问题描述】:

我正在尝试根据该单元格中标签中的文本行使表格中的所有行都有自己的行高。我的出发点是这里的 Wenderlich 教程: https://www.raywenderlich.com/129059/self-sizing-table-view-cells

我正在使用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
        

`

【问题讨论】:

显示你的单元格,你一定有错误的自动布局约束。 您是否有内容的大小应该不同的单元格到单元格?关于“我在代码中为估计的行高输入的数字或在情节提要的表格视图单元格中为行高输入的数字似乎并不重要”;在确定自动调整大小的单元格的最终高度时,这些事情都不重要。 是的,内容的大小应该不同的单元格到单元格。我的示例文本从单行到 3 行不等。我附上了我的约束的屏幕截图以及模拟器的输出当前的样子。感谢 Umair 和 Connor! 【参考方案1】:

您对标签没有任何限制,因此标签不会导致其他任何内容发生变化。您对标签没有限制的原因是您正在使用堆栈视图做所有事情。但是堆栈视图不会从内到外神奇地调整大小。因此,它们完全妨碍了你。

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

【讨论】:

这是一个可下载的项目,它根据标签中的文本数量调整单元格的大小。您可以下载并运行它,您会看到它确实有效。 github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 太棒了,非常感谢,马特!那么如何在不添加回堆栈视图的情况下添加回右侧的复选框按钮? 只要在右边放一个复选框按钮。它可以是附件视图,或者您可以将其添加为contentView 的子视图,就像标签一样。关键是要使约束正确。您可能希望这个东西垂直居中,具有高度和宽度约束,并位于其父视图的右边缘。 — 无论如何,堆栈视图在表格视图单元格中看起来确实有点矫枉过正。

以上是关于使用 UITableViewAutomaticDimension 后行高度相同的主要内容,如果未能解决你的问题,请参考以下文章

在 HeightOfRow 中使用自动调整大小

带有嵌入 UICollectionView 的 UITableView 不起作用

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇