UICollectionViewCell 和自动布局缩放
Posted
技术标签:
【中文标题】UICollectionViewCell 和自动布局缩放【英文标题】:UICollectionViewCell and Autolayout scaling 【发布时间】:2014-05-27 21:17:41 【问题描述】:我已经构建了一个普通的 UICollectionView,它使用的单元格是我屏幕的全尺寸...
我使用的 ViewCell 是在 IB 中定义的,尺寸为 320x568,并且我添加了自动布局约束,当窗口大小发生变化时应该允许它们按比例缩小。
有没有办法让正常的集合视图流布局检测可用窗口(通话栏、3.5 英寸屏幕等)中的变化,并更新视单元默认大小以使其与可用窗口匹配房地产,还是需要定制代码来监听分辨率的变化?如果是这样,我需要采用什么方法来捕捉窗口大小的这种变化?
【问题讨论】:
【参考方案1】:这可能有效:
子类化 UICollectionViewFlowLayout 并像这样覆盖方法 (shouldInvalidateLayoutForBoundsChange):
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
[self invalidateLayout];
return YES;
这将在 collectionView 的边界更改时强制刷新布局。 (例如旋转)。
您还必须实现以下 UICollectionViewDelegate 方法:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
return self.collectionView.bounds.size;
现在如果你对你的 collectionsView 有很好的约束,它的框架应该随着窗口的变化而更新,并导致布局更新。
让我知道它是否有效:)
【讨论】:
据我所知,这不会导致实际项目大小的更新,因此即使布局更新,单元格也不会在需要时按比例缩小。 我编辑了我的答案。在一个小项目上测试过,它似乎可以工作。 我不确定我是否理解,这如何解决设置项目大小以使其保持“全屏”并处理对状态栏高度的修改的问题? Invalidate Layout 只是告诉运行时它应该重新计算事物,但我看不出您如何根据可用的屏幕约束指示新的项目大小。 另外,我所做的只是让您可以随时将项目保持在您的 collectionView 的大小。现在你必须对其施加正确的约束以上是关于UICollectionViewCell 和自动布局缩放的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 单元内的 UICollectionViewCell 和自动布局
UICollectionViewCell 以编程方式自动布局
自动布局:无法获取 UICollectionViewCell 子视图的帧大小