我实现了一个流式布局,顶部有一个粘性装饰视图。这是通过继承UICollectionViewFlowLayout并重写以下方法来实现的:
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
return YES;
}
和
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSMutableArray *result = [[super layoutAttributesForElementsInRect:rect] mutableCopy];
[result addObject:[self stickyHeaderLayoutAttributes]];
return result;
}
(在内部,装饰视图的布局属性存储为属性,-stickyHeaderLayoutAttributes更新其框架以始终显示在集合视图的顶部。)
现在,我在集合视图控制器的导航栏上有一个切换按钮,它使用自定义流布局显示一些数据。点击切换按钮,可以通过在导航栏下滑动来隐藏装饰视图。第二个水龙头应该显示它(再次,从导航栏下方滑动)。
我隐藏装饰视图的方法如下(它以类似的方式显示它):
调用
[self.collectionView performBatchUpdates:nil completion:nil];
然而,我注意到,只是在第2步, finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:被调用,这意味着装饰视图应该被移除。
为什么会这样?
indexPathsToDeleteForSupplementaryViewOfKind:返回一个空数组,因此我不清楚为什么要删除装饰视图。
有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
如果您只想删除装饰视图,可以使用removeFromSuperview。
我展示了一个嵌套在容器视图中的collectionView,并使用以下内容删除装饰视图(BGSScheduleDecorationView):
- (IBAction)butAction1:(id)sender
{
for (UIView *view in self.myCollectionVC.collectionView.subviews) {
if ([view isKindOfClass:[BGSScheduleDecorationView class]])
{
[view removeFromSuperview];
}
}
}