【问题标题】:UICollectionViewCell and Autolayout scalingUICollectionViewCell 和自动布局缩放
【发布时间】:2014-05-27 21:17:41
【问题描述】:

我已经构建了一个普通的 UICollectionView,它使用的单元格是我屏幕的全尺寸...

我使用的 ViewCell 是在 IB 中定义的,尺寸为 320x568,并且我添加了自动布局约束,当窗口大小发生变化时应该允许它们按比例缩小。

有没有办法让正常的集合视图流布局检测可用窗口(通话栏、3.5 英寸屏幕等)中的变化,并更新视单元默认大小以使其与可用窗口匹配房地产,还是需要定制代码来监听分辨率的变化?如果是这样,我需要采用什么方法来捕捉窗口大小的这种变化?

【问题讨论】:

    标签: ios autolayout


    【解决方案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 的大小。现在你必须对其施加正确的约束
    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多