我开始在一个大型项目中使用 AutoLayout,并对它感到非常惊讶。但是,现在我必须调整项目以适应旋转和尺寸类别,并且我在让视图正确运行方面遇到了很大的麻烦。
基本问题是我有UICollectionViews
with 再次包含 UICollectionViews 的单元格。当设备旋转时,基本集合视图会正确调整其单元格,但嵌套集合视图的所有单元格不会自动调整为新大小。
经过调查,得出结论是:
- When
viewWillTransitionToSize
被调用时,基本集合视图尚未旋转(如预期)
- 在调用 viewDidLayoutSubviews 之后的某个时间,基本集合视图现在具有旋转的大小 - 但不幸的是它的单元格还没有 - 它们仍然具有旋转之前的宽度
- 即使在
coordinator animateAlongsideTransition ... completion:{}
阻止viewWillTransitionToSize
单元格还没有新的宽度。
上述意味着我无法告诉嵌套集合视图的单元格更改其大小,因为我还不知道新的宽度;并且自动布局系统不会自动调整它们。
还有其他人有同样的问题或知道解决方案吗?
在这里回答我自己的问题 - 我终于找到了解决方案。对于其他遇到此问题的人,我是这样做的:
主要部分在于放置invalidateLayout
and reloadData
在正确的地方调用:
- Put an
invalidateLayout
在基础 collectionView 的布局上willTransitionToSize
功能。
- Put a
reloadData
在基础 CollectionView 中完成块 of a coordinator animateAlongsideTransition:
调用willTransitionToSize
功能。
- 确保自动布局单元格中任何视图的约束都设置正确 - 我将带有自动布局约束的单元格视图连接到代码中单元格的内容视图。
- 如果您覆盖了
prepareLayout
集合视图布局的功能,请确保预先计算的单元格大小使用正确的宽度,我在这里使用了错误的宽度,这导致了一些额外的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)