0

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

用一些代码说明的问题:

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

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

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

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

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

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

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

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

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

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

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

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

4

1 回答 1

0

你有没有尝试过

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

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

于 2015-05-08T07:29:47.670 回答