在UICollectionView下方插入子视图

3

当我在UICollectionView下方添加一个子视图时,有时子视图会显示在UICollectionView单元格上方。以下是子视图插入代码:

[self.collectionView insertSubview:self.garmentView atIndex:0];

我不确定自己是否没有遵循最佳实践或者是错过了一些显而易见的东西。任何帮助都将不胜感激。

** 编辑 ** 值得注意的是,这只发生在横屏模式下,当最右侧的单元格被放大时。


你为每个集合单元格都有自定义视图吗? - sissichen
每个单元格都有一个UIImage和一个UILabel。 - Michael Mangold
1
当你说下面的时候,是指集合视图之外吗?如果是这样,你应该使用一个UIViewController,并将集合视图作为其中一个子视图。UICollectionViewController(像UITableViewController一样)除了集合视图之外没有其他视图,因此您无法添加不成为集合视图一部分的子视图。 - rdelmar
感谢您的回复。我正在使用一个UICollectionViewController子类,它使得与Core Data的连接更容易,如果可能的话,我宁愿不改变。请看一下我上面的编辑,如果有帮助的话。非常感谢,您的想法确实有道理。 - Michael Mangold
子类化 UICollectionViewController 很有意义。你的编辑可能意味着你需要在你的 UICollectionViewCell 子类中做更多的工作,在 prepareForReuse 方法中。 - Lev Landau
2个回答

10

我认为

self.garmentView.layer.zPosition = -1
[self.collectionView insertSubview:self.garmentView atIndex:0];

这将解决您的问题。我猜测,可能出现的情况是集合视图单元格添加的索引比您的garmentView低。请参阅此问题以获取有关子视图位置的更全面讨论。


感谢您的回复。现在,garmentView出现在collectionView单元格下方,但是点击单元格仍然无法正常工作。 - Michael Mangold
如果它拦截并阻止了触摸事件,我会尝试使用 self.garmentView.userInteractionEnabled = YES。如果问题仍然存在,我会在 [UIResponder touchesBegan:withEvent:] 中设置一个符号断点,并尝试跟踪触摸按下事件的发生情况。 - Lev Landau
我在相关时刻使用NSLog记录了self.garmentView.userInteractionEnabled,结果为YES。 - Michael Mangold

0
为什么不这样做呢:

[self.collectionView addSubview:self.garmentView];
[self.collectionView insertSubview:self.garmentView belowSubview:self.collectionView];

你在使用Storyboard吗?你的控制器是哪个类的成员?

是的,我正在使用故事板。控制器是一个UICollectionViewController。 - Michael Mangold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接