UICollectionView iOS 9在支持RTL语言的项目上发布

在使用UICollectionView时,似乎苹果在RTL语言中使用自动翻转界面的新function会导致问题。

我在收集视图中使用了Trailing / Leadingtypes的约束条件,并且按照RTL语言切换了它们的值。

问题是实际显示的数据是集合数据源中的最后一个 indexPath ,但是第一个单元格的UIScrollView.contentOffset.x是0。

一个适当的行为将是以下之一:

  1. 正确显示第一个indexPath并切换滚动的方向(向右) – 最佳select
  2. 不翻转UI /约束,所以indexPath -data / indexPath / scrollView.contentOffset.x将被同步 – 禁用RTL支持的选项。
  3. 呈现最后一个indexPath的单元格和数据,但修复scrollView.contentOffset.x以表示最后一个单元格的位置。

我猜苹果可能会在将来某个时候修复它,但同时我们将不得不使用倒序数组和/或滚动到最后一个对象的解决方法。

我处于类似的情况,并find了解决办法。 如果您使用的是swift,请将以下代码片段添加到您的项目中,并确保bounds.origin始终遵循集合视图的前端。

 extension UICollectionViewFlowLayout { open override var flipsHorizontallyInOppositeLayoutDirection: Bool { return true } } 

如果您正在使用Objective-C,只需创buildUICollectionViewLayout类的子类并覆盖flipsHorizo​​ntallyInOppositeLayoutDirection,并返回true。 使用这个子类作为你的集合视图的布局对象。