UICollectionView 项目顺序在从右到左的语言中不会颠倒
UICollectionView items order not reversed in right to left languages
我注意到一个大问题,在从右到左的语言中,单元格的顺序没有正确颠倒,只有对齐是正确的。但仅适用于水平流布局,并且如果集合视图包含不同的单元格大小!是的,我知道这听起来很疯狂。如果所有单元格的大小都相同,则排序和对齐很好!
这是我到目前为止使用示例应用程序得到的结果(隔离以确保这是实际问题,而不是其他问题):
(第一个柱应始终绘制为蓝色,然后大小随索引增加。)
这是 UICollectionViewFlowLayout
(在 iOS 11 上)的内部错误吗?还是我明显遗漏了什么?
这是我的测试代码(没什么花哨的 + XIB with UICollectionView
):
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 6
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "test", for: indexPath)
cell.backgroundColor = (indexPath.item == 0) ? UIColor.blue : UIColor.red
return cell
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (10 * indexPath.item) + 20, height: 170)
}
我相信为此你必须实现你自己的 custom collectionViewLayout - 虽然我知道人们会期望它会像其余组件上的从右到左一样自动工作。
right-to-left dynamically-sized UICollectionViews 的自动支持不是受支持的配置。为此,您需要明确注册自动布局镜像,如下所示:
- 创建
UICollectionViewFlowLayout
的子类
- 覆盖
flipsHorizontallyInOppositeLayoutDirection
和 Swift 中的 return true
或 Objective-C 中的 YES
- 将其设置为 collection 视图的布局
此 属性 是在 UICollectionViewLayout
(Flow 的 parent)上定义的,因此从技术上讲,您可以在您已有的任何自定义布局上使用此 属性。
我注意到一个大问题,在从右到左的语言中,单元格的顺序没有正确颠倒,只有对齐是正确的。但仅适用于水平流布局,并且如果集合视图包含不同的单元格大小!是的,我知道这听起来很疯狂。如果所有单元格的大小都相同,则排序和对齐很好!
这是我到目前为止使用示例应用程序得到的结果(隔离以确保这是实际问题,而不是其他问题):
(第一个柱应始终绘制为蓝色,然后大小随索引增加。)
这是 UICollectionViewFlowLayout
(在 iOS 11 上)的内部错误吗?还是我明显遗漏了什么?
这是我的测试代码(没什么花哨的 + XIB with UICollectionView
):
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 6
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "test", for: indexPath)
cell.backgroundColor = (indexPath.item == 0) ? UIColor.blue : UIColor.red
return cell
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (10 * indexPath.item) + 20, height: 170)
}
我相信为此你必须实现你自己的 custom collectionViewLayout - 虽然我知道人们会期望它会像其余组件上的从右到左一样自动工作。
right-to-left dynamically-sized UICollectionViews 的自动支持不是受支持的配置。为此,您需要明确注册自动布局镜像,如下所示:
- 创建
UICollectionViewFlowLayout
的子类
- 覆盖
flipsHorizontallyInOppositeLayoutDirection
和 Swift 中的 returntrue
或 Objective-C 中的 - 将其设置为 collection 视图的布局
YES
此 属性 是在 UICollectionViewLayout
(Flow 的 parent)上定义的,因此从技术上讲,您可以在您已有的任何自定义布局上使用此 属性。