多行 UILabel 在自动 UITableViewCell 上无法正确显示

Multiline UILabel doesn't display properly on automatic UITableViewCell

编辑:我认为这可能与 iOS 8.3 有关。这不会发生在模拟器上,我的测试人员 none 有问题,但我的开发人员 phone 有 8.3。关于如何修复它有什么想法吗?

edit2:我在这里找到了答案 。我已经在下面回答了这个问题,并将在 2 天内接受,但我想这在技术上是重复的?

我有一个 UITableView,rowHeight 设置为 UITableViewAutomaticDimension

每个单元格包含多个标签,其中一个可以是多行。有时,单元格正确显示,标签占用多行。其他时候,单元格 大小 正确,但标签只占用一行,在其他行应该消失的地方留下一个大空 space。

表格视图由 NSFetchedResultsController 支持。

显示我的意思的图片(要清楚 "Expected" 不是渲染,它是应用程序在某些时候运行的实际屏幕截图)

我尝试过的事情+想法

页面上有一个刷新操作,我已经尝试了 tableView.reloadData()tableView.setNeedsLayout(),但似乎都没有用

我注意到创建通知时如果我在 tableView 上,它会正确显示。如果我强行退出应用程序(或从 XCode 再次 运行 应用程序)并且单元格是从获取结果初始化的,那么它们会错误地显示。

此应用也在 testflight 上,我们有 ~5 名测试人员 none 报告了该问题。

编辑回复评论

设置标签的代码 cellForRowAtIndexpath

let cell = tableView.dequeueReusableCellWithIdentifier(StoredNotificationViewController.snTableViewCellReuseIdentifier, forIndexPath: indexPath) as! StoredNotificationTableViewCell
configureCell(cell, atIndexPath: indexPath)

配置单元格

    let storedNotification = snFetchedResultsController.objectAtIndexPath(indexPath) as? StoredNotification
    cell.setData(storedNotification)

cell.setData

    messageLabel.text = notification.message

确保您的所有约束都连接到 Cell 的边缘,所以它知道它是什么 height.If 您已经这样做了,而不是尝试将垂直内容拥抱优先级设置为 751 并将垂直内容压缩阻力优先级设置为该标签的 751。您也可以将该标签的底部约束优先级设置为 750。如果这对您有帮助,请告诉我。

答案在这里

基本上,您将 cell.updateConstraintsIfNeeded() 添加到 tableView(_:cellForRowAtIndexPath:) 方法的末尾