为什么动态计算UICollectionView的项目大小后,从右向左滚动不起作用?

问题描述

我使用的是快速编程语言,而我的应用程序显示的语言是RTL(波斯语)。 在我的项目中,我使用UICollectionView来水平显示一些标签(UICollectionViewCell包含UILabel)。 我想根据标签显示的文本的大小来计算UICollectionViewCell的大小,这是我在sizeforItemAt方法中的代码

func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeforItemAt indexPath: IndexPath) -> CGSize {
    let text = arrayContainSomePersianStrings[indexPath.row]
    let textSize = text.size(withAttributes: [NSAttributedString.Key.font: UIFont.somePersianFont(17)])
    return CGSize(width: textSize.width + 20,height: 50)
}

并且因为我使用RTL语言显示数据,所以我将UICollectionView的方向从右向左更改(开始从右向左显示数据),这是我的代码

collectionView.semanticContentAttribute = .forceRightToLeft

但是它不起作用(UICollectionView开始从左到右显示数据)。当我将sizeforItemAt方法更改为此时,一切正常:

func collectionView(_ collectionView: UICollectionView,sizeforItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: 200,height: 50)
}

为什么会这样,以及如何解决此问题。

例如arrayContainSomePersianStrings包含:

["1","2","3","4"]

我想在UICollectionView中显示这样的数据:

["4","1"]

但是当我要计算项目大小时,UICollectionView显示内容取决于文本大小:

["1","4"]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)