UITableViewCell 中的 UILabel 大小不正确(分配文本后的动画)

UILabel incorrectly sized in UITableViewCell (Animation after assigning text)

UILabel中的文字显示后闪烁,先是单行出现省略号,然后占满2行。 请注意,单元格高度没有改变。

这是问题所在:
标签“Друзъя, примите участие и наполните Коробку!” (朋友们,参与并填写方框!)在视图转换期间首先出现 截断 并且未对齐为“Друзъя, примите участи...” .

这只发生在 iPhone 4s 与 iOS 8.1。所有对 Label 的操作(文本分配除外)都发生在 Storyboard 中。

造成这种闪烁的原因是什么?

假设您正在更改 cellForRowAtIndexPath 中的测试,并进一步假设这不会发生在所有字符串上,只有一些具有一定长度,那么这是一个 iOS 错误。

请参阅关于 this Stack Overflow UITableViewCell post 的冗长讨论以及可能的解决方法:

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.setNeedsLayout()
    tableView.layoutIfNeeded()
    tableView.reloadData()
}

备注

1. 我还注意到 estimatedRowHeight 使用较小的值,例如 20,它没有最小的单元格高,与双倍 reloadData() 结合使用也是有益的。

2. 更改单元格宽度时,您需要在 setNeedsLayout() 之前调用额外的 reloadData(),例如切换 tableView.editing

3. 修补标签的可靠替代方法是使用 不可编辑、不可选择、none 大写、启用无滚动、没有显示水平和垂直指示器,没有反弹 UITextView


练习这个错误,并尝试各种解决方法:

► 在 GitHub and additional details on Swift Recipes 上找到此解决方案。