table 视图单元格的自动大小似乎在标准 UIViewController class 中不起作用

Auto size of table view cell does not appear to work in a standard UIViewController class

为了验证这个问题,我创建了一个测试项目。在项目故事板中,我有两个场景。一个场景基于创建项目时添加到单视图应用程序的初始 ViewController。第二个场景是通过将 UITableViewController 拖到故事板上创建的。

在这两个场景中,我相信我已经配置了原型单元格,因此它应该自动调整大小。当我将初始 ViewController 设置为基于 UIViewController 的 UITableViewCell 时,UITableViewCell 无法正确显示/调整大小。 (见下文)

然而,当我将初始 ViewController 设置为基于 UITableViewController 的那个时,一切正常。 (见下文)

代码/项目非常简单,我希望有人看到了这个并能告诉我为什么 UITableViewCell 的自动大小无法正常工作,而 class 基于 UIViewController 节 a UITableViewController。任何帮助将不胜感激。看来我无法在此处上传项目,因此我将尝试将其上传到另一个位置并使用 link.

更新问题

回答标准问题

  1. 两个原型单元格中都有两个 UILabel
    1. 第一个 UILabel 指定了左、上、右和下约束。
    2. 第二个 UILabel 指定了左、右和下约束。
    3. 两个 classes 都将 estimatedRowHeight 设置为一个数字,将 rowHeight 设置为 UITableViewAutomaticDimension
    4. 所有 UILabel 行 属性 设置为 0
    5. 两个场景中的第一个 UILabel 的换行符设置为自动换行
    6. 两个场景中的第二个 UILabel 的换行符设置为截尾。

下面是界面生成器中场景的屏幕截图。左侧基于 UIViewController,右侧基于 UITableViewController

这是我希望的代码link:Sample Project

对我来说很管用

  1. 给出上UILabel(右、上、左)约束
  2. 给出较低的UILabel(右、上、左、下)约束

自定义 UITableViewcell

override func awakeFromNib() {
    super.awakeFromNib()
    up.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
    down.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
    up.numberOfLines = 0
    down.numberOfLines = 0
    // Initialization code
}

编辑

UITableViewController

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

UIViewController

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

所以我发现 "silver bullet" 似乎解决了大量关于原型单元格自动布局的挑战。

在 cellForRowAtIndexPath 函数中,我在 return 单元格之前添加了以下代码行:

lobj_NearbyLocationEntry!.layoutIfNeeded()

(lobj_NearbyLocationEntry 是我正在 returning 的单元格变量的名称。)

当我这样做时,table 的自动布局工作正常。另外,我发现在使用 UITableViewController 的代码中也存在缺陷。一旦数据加载并且一切看起来都不错,如果您向下滚动然后向上滚动,您将看到几个单元格现在布局不正确。将这行代码放在那个视图控制器的代码中也解决了那个布局问题。

我希望这能帮助很多坐在那里试图弄清楚为什么他们的应用程序不能正确自动布局 tableView 单元格的人。 :)