【问题标题】:Custom UICollectionViewLayout animation issues自定义 UICollectionViewLayout 动画问题
【发布时间】:2013-09-09 14:02:29
【问题描述】:

我开发了一个自定义 UICollectionViewLayout 来处理客户端应用程序的一些高级布局要求,这似乎工作得很好。直到我开始尝试使用动画。

我花了一些时间来记录并使其更加灵活,因此可以在这里找到它:https://github.com/liamnichols/LNCollectionViewPagedLayout

它的目的是如果内容不适合上一页,则将内容分页到新页面上,以确保内容不会跨越两个页面,并且似乎可以处理这个问题。

我从一开始就注意到它存在动画问题,但是我最初不需要使用动画,所以没有尝试调查/修复,尽管现在它成为UICollectionViewCell 可以扩展以显示更多内容和当我尝试使用任何形式的动画方法(reloadRowsAtIndexPaths:performBatchUpdates:completion: 等)时,我总是会遇到非常奇怪的行为,从崩溃(view argument is nil)到混乱的布局。

目前我的布局通过在prepareLayout 上创建一个UICollectionViewLayoutAttributes 的字典来工作,方法是询问代表每个单元格的大小,然后运行一些逻辑来查看它是否适合等等...

当调用layoutAttributesForElementsInRect: 方法时,它可以简单地查询字典并获取与该矩形相关的属性数组。

首先,这是创建此布局的最佳方式吗?我发现很难找到有关创建自定义布局以满足我的需求的文档,并最终查看了其他开源库以获取有关该做什么的指针。

其次,我没有实现初始/最终布局属性方法,因为我不知道如何正确使用它们。这是我遇到问题的原因还是这些是可选的?

任何有关正确创建 UICollectionViewLayouts 的帮助或指示都会很棒。

【问题讨论】:

    标签: ios objective-c layout uicollectionview uicollectionviewlayout


    【解决方案1】:

    对于扩展单元格(或通常只是单元格改变大小)的问题,此答案may be helpful。简短的回答是initialLayoutAttributesForAppearingItemAtIndexPath: 的默认实现(以及通常所有初始/最终布局属性方法)并不总是返回正确的帧,您必须覆盖此方法并修复错误。

    调试这些类型的问题相当简单。首先记录返回的属性,如下所示

    - (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
        UICollectionViewLayoutAttributes *attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:itemIndexPath];
        NSLog(@"indexPath=%@, attributes=%@", itemIndexPath, attributes);
        return attributes;
    }
    

    并确定帧何时不正确。从那里你可以想出一种方法来纠正错误。在不知道更多细节的情况下,这大概是我能得到的最详细的信息。

    【讨论】:

    • 感谢指点,我去看看 initialLayoutAttributes 方法,看看情况如何!
    • 我接受这个作为答案,因为调试提示帮助我发现当 contentOffset 不是 CGPointZero 时我正在读取 collectionView 的边界。这会导致不正确的值导致我的布局自行损坏和崩溃。感谢您的提示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2011-12-23
    相关资源
    最近更新 更多