有没有不使用 sizeToFit 就能准确计算 UILabel 大小的方法?

Is there any accurate way of calculating size of UILabel without using sizeToFit?

我知道这个问题很难解决,但我只是想知道是否有人找到了更好的解决方案。使用 boundingRect 不准确,因为它不适用于自动换行。我不想使用 sizeToFit 的原因是,当有很多标签要计算时,它会导致相当大的性能损失,从而导致滚动过程中出现抖动(我正在使用 UICollectionView)。

存在使 sizeToFit 成为可能的内部方法 - sizeThatFits(_ size: CGSize) -> CGSize。您可以使用它来计算大小而无需实际重新布局视图。

除此之外别无他物。有很多方法,正如您提到的计算具有不同 fonts/attributes/whatever 的字符串的边界框,但它们总是有点偏离,因为 UI 控件具有不可公开访问的内部布局或边距。即使你现在让它工作,它也会从 iOS 到 iOS.

发生很大变化

作为一种解决方案,我建议缓存大小。在模型更改、旋转或集合视图宽度更改时无效。