换句话说 - 当关联的集合视图重新加载数据时,您如何知道在UICollectionViewFlowLayout 中?
我正在使用Brandon Alexander的受欢迎且令人敬畏的BPXLFlowLayout
,
这是制作“弹性”系列的最佳方式,例如iOS消息应用程序。
How to replicate Messages bouncing bubbles in iOS 7
我在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中的“触发内容”。
我想这是可能的,NOTHING实际上是在UICollectionViewFlowLayout中触发的..在这种情况下,我的方法是添加一个手动的方法,当你重新加载数据时你必须“调用”,我猜这是唯一的方法。