Multiline UILabel无法在自动UITableViewCell

时间:2016-09-16 17:47:00

标签: ios iphone swift uitableview uilabel

编辑:我认为这可能与iOS 8.3有关。这不会发生在模拟器上,我的测试人员都没有问题,但我的开机手机上有8.3。关于如何解决它的任何想法?

edit2:我在这里找到了答案https://stackoverflow.com/a/36711109/1552116。我已经在下面回答了这个问题,并且会在2天内接受,但我想这在技术上是重复的吗?

我有一个UITableView,其rowHeight设置为UITableViewAutomaticDimension

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

tableview由NSFetchedResultsController支持。

图片显示我的意思(要清楚"预期"不是渲染,它是应用程序在某些时间工作的实际屏幕截图) enter image description here

我尝试的事情+思考

页面上有一个刷新操作,我已尝试tableView.reloadData()tableView.setNeedsLayout()并且两者似乎都没有帮助

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

这个应用程序也在testflight上,我们没有约5名测试人员报告过这个问题。

编辑回答评论

设置标签的代码 的cellForRowAtIndexPath

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

configureCell

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

cell.setData

    messageLabel.text = notification.message

2 个答案:

答案 0 :(得分:4)

答案在https://stackoverflow.com/a/36711109/1552116

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

答案 1 :(得分:0)

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