换句话说——你怎么知道,在 UICollectionViewFlowLayout中,关联的集合视图何时重新加载了数据?
我正在使用BPXLFlowLayout
Brandon Alexander 的流行和真棒,
这是制作“有弹性”集合的最佳方式,例如 iOS 消息应用程序。
我在 BPXLFlowLayout 和其他 UICollectionViewFlowLayout 方法中发现了一个真正的问题。通常,您只在一个布局、一个集合视图中“使用它们一次”。假设您有一个集合视图“BouncyViewHouses”
@interface BouncyViewHouses : UICollectionViewController
使用 BPXLFlowLayout
一切都很好,直到你重新加载。或者让我感到困惑的是,如果您在另一个集合视图上使用相同的 BPXLFlowLayout,您似乎遇到了同样的问题。
要解决这个问题,你必须做这样的事情
@implementation BouncyViewHouses
-(void)safelyReloadBouncyTable
{
[self.collectionView reloadData];
[(BPXLFlowLayout *)self.collectionView.collectionViewLayout fastSignal];
}
每当您重新加载集合时,您必须“手动”将动画师归零。
因此,例如在 BPXLFlowLayout 中,我添加了一个新方法......
@interface BPXLFlowLayout ()
@property (nonatomic, strong) UIDynamicAnimator *animator;
@end
@implementation BPXLFlowLayout
-(void)fastSignal
{
// it's very difficult to have prepareLayout (or, anything) called when you
// reload the collection data. in fact, you must call this manually.
self.animator = nil;
}
当我重新加载数据源时,我必须从集合视图中手动调用它。
(如果你不这样做,你会遇到很难解决的非常棘手的问题!)
我的问题..你会认为在 BPXLFlowLayout (或类似的)中你可以调用self.animator = nil;
在里面-(void)prepareLayout
或者也许shouldInvalidateLayoutForBoundsChange:
但它不起作用!我尝试了所有方法,总之,当数据源重新加载到关联的集合视图上时,我无法弄清楚 UICollectionViewFlowLayout 中的“触发了什么”。
我想这是可能的,在 UICollectionViewFlowLayout 中真正触发了 NOTHING .. 在这种情况下,我的方法是添加手动痒痒,当你重新加载数据时“必须调用”它,我想这是唯一的方法。