right-to-left - NSCollectionViewCompositionalLayout 在 RTL 中完全损坏(从右到左)
问题描述
问题
现代 NSCollectionView 应该很好地支持从右到左的语言,但是我不太明白为什么我在NSCollectionViewCompositionalLayout
基于项目的配置中产生的布局在 RTL 中完全被破坏。
请注意,布局在 LTR 中看起来与预期一样,它仅在 RTL 中中断:部分似乎重叠并且项目位置不正确;有时水平 contentSize 也比它应该的大。请参阅下面的图片。
这是显示问题的示例项目: https ://github.com/ggould75/CollectionViewBrokenLayout
- 使用 basics
NSCollectionView
,NSCollectionViewCompositionalLayout
并且NSCollectionViewItem
不涉及子类。 - 集合视图项只不过是带有边框以区分它们的红色矩形。
- 集合视图数据源配置为返回 2 个部分:部分 0 有 2 个项目,部分 1 有 4 个。
这是我布局的核心:
private lazy var collectionViewLayout: NSCollectionViewCompositionalLayout = {
let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(Self.itemSize.width),
heightDimension: .fractionalHeight(1))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .estimated(Self.itemSize.width),
heightDimension: .fractionalHeight(1))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10)
let layoutConfiguration = NSCollectionViewCompositionalLayoutConfiguration()
layoutConfiguration.scrollDirection = .horizontal
let compositionalLayout = NSCollectionViewCompositionalLayout(section: section, configuration: layoutConfiguration)
return compositionalLayout
}()
我希望它在 RTL 中的外观:
我试过的
- 我读到一些人设法通过将仿射变换应用于集合视图和表示项目的视图来解决这个问题(将 x 轴都缩放到 -1)。这在旧版本的集合视图中可能需要,无论如何我尝试过没有任何改进。集合视图似乎完全忽略了转换。
- UICollectionViewLayout 有一个名为 flipsHorizontallyInOppositeLayoutDirection 的属性,但在 NSCollectionViewLayout 上没有。同样,semanticContentAttribute 在 NSView 中不可用。
- 试图玩,
collectionView.userInterfaceLayoutDirection = .rightToLeft
但它没有任何效果(它已经设置为此值)。 - 如果我返回 numberOfSections:... = 1 而不是 2,则第 0 部分将正确对齐到右侧,并且内容大小也看起来不错。那么,当我有多个部分时,为什么一切都会中断?
- 我玩过我在 NSCollectionViewCompositionalLayout 中的配置,但我认为我所做的是正确的......
- 设置 RTL 语言后重新启动 macOS 也无济于事。
知道我可能做错了什么吗?
谢谢
解决方案
推荐阅读
- android - 尝试获取“BottomNavigationView”的布局参数时应用程序崩溃
- matlab - 三次样条 MATLAB 错误结果
- python - Python requests.post 代码将结果限制为 200。如何调整代码以获得所有 1000+ 的结果?
- html - 为什么我的视频没有显示?
- c++ - 为什么我能够更改作为常量引用传递的对象的成员?
- scala - 如何从 spark DataFrame 中获取所有行?
- algorithm - 如何查找目的地和源之间的距离是否小于5?
- c++ - 一个参数构造函数如何工作?
- ios - 如何运行两个反应本机应用程序?
- vue.js - 如何使用vue资源在标头中发送多个参数