【发布时间】:2017-04-13 11:43:21
【问题描述】:
我知道这个问题是一个很长的问题,但我只是想知道是否有人找到了更好的解决方案。使用 boundingRect 并不准确,因为它不适用于自动换行。我不想使用 sizeToFit 的原因是,当有很多标签要计算时,它会导致相当大的性能损失,从而导致滚动过程中出现抖动(我正在使用 UICollectionView)。
【问题讨论】:
标签: swift uicollectionview uilabel sizetofit
我知道这个问题是一个很长的问题,但我只是想知道是否有人找到了更好的解决方案。使用 boundingRect 并不准确,因为它不适用于自动换行。我不想使用 sizeToFit 的原因是,当有很多标签要计算时,它会导致相当大的性能损失,从而导致滚动过程中出现抖动(我正在使用 UICollectionView)。
【问题讨论】:
标签: swift uicollectionview uilabel sizetofit
有一种内部方法使sizeToFit 成为可能 - sizeThatFits(_ size: CGSize) -> CGSize。您可以使用它来计算大小,而无需实际重新布局视图。
除了没有别的。正如您所提到的,有很多方法可以计算具有不同字体/属性/其他内容的字符串的边界框,但它们总是有点偏离,因为 UI 控件具有不可公开访问的内部布局或边距。即使你现在让它工作,它也会从 iOS 到 iOS 发生很大变化。
作为一种解决方案,我建议缓存尺寸。在模型更改、旋转或集合视图宽度更改时失效。
【讨论】:
sizeThatFits