使用 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 后行高度相同的主要内容,如果未能解决你的问题,请参考以下文章
带有嵌入 UICollectionView 的 UITableView 不起作用