uicollectionview装饰破帧?

时间:2014-12-14 17:17:29

标签: uicollectionview uicollectionviewlayout uicollectionreusableview

我有一个带有自定义布局的UICollectionView,并尝试显示装饰视图。

一些代码说明了问题:

attributeDecorationTime.frame = CGRectMake(0.0f,
                                           0.0f,
                                           [self getXOffset],
                                           (epgCollectionView.bounds.size.height+epgCollectionView.contentOffset.y));

如果[self getXOffest]值位于屏幕中心,则此代码应显示将屏幕分成两部分的装饰视图。左边部分是装饰视图,右边是我们可以看到装饰视图未隐藏的半个集合视图。

在iphone模拟器上,一开始它按预期工作但当我开始向下滚动时,我可以看到装饰视图的底部。我不希望看到装饰视图的底部,装饰视图必须始终覆盖屏幕高度。

看起来如果我制作epgCollectionView.contentOffset.y * 2,它可以工作,也许视网膜屏幕相关?但是,如果它是视网膜@ 2x像素问题,为什么它会覆盖屏幕?

现在,如果我使用此代码:

attributeDecorationTime.frame = CGRectMake(0.0f,
                                           epgCollectionView.contentOffset.y,
                                           [self getNowXOffset],
                                           (epgCollectionView.bounds.size.height+epgCollectionView.contentOffset.y));

当我向下滚动集合视图时,装饰视图向下滚动。

当我正确理解其含义时,装饰视图不会使用与常规单元格或标题单元格相同的x y。

现在,当我在ipad模拟器上运行第一个代码时,应该在y = 0上的装饰视图从y = 74开始,这是主视图控制器中的集合视图y位置。

有人可以解释一下我做错了什么吗?

我只想要一个覆盖iphone / ipad屏幕整个高度的装饰视图。

另一方面,我对x值(装饰视图的宽度)没有任何问题。这让我想到,当我改变属性时,我应该使视图无效吗?自定义布局会重新计算每个滚动的属性。自定义布局中的[self invalidateLayout]似乎没有改变任何东西。

1 个答案:

答案 0 :(得分:0)

你试过吗

attributeDecorationTime.frame = CGRectMake(0.0f,
                                       0.0f,
                                       [self getXOffset],
                                       (epgCollectionView.contentSize.height));

我认为你应该使用contentSize.height来覆盖全部内容高度而不是屏幕高度。在像UICollectionView这样的可滚动视图中,contentSize通常大于屏幕大小