在iOS集合视图中的单元格顶部显示菜单控制器

时间:2014-05-30 06:44:32

标签: ios objective-c ios7 uicollectionview

我想在用户长按集成视图中嵌入容器视图的单元格时显示带有自定义操作的UIMenuController。

我已经实现了这个堆栈溢出解决方案中提到的工作正常。 Copy Callout in UICollectionView

我现在遇到的问题是,即使我将箭头方向保持在UIMenuControllerArrowDown,菜单项也会出现在单元格下方。

enter image description here

我的集合视图是视图控制器内部的容器视图的一部分。当我按下集合视图中的图像时,它显示单元格底部的菜单项。如何在顶部显示?

我试图在下面的特定视图中显示它,但我的努力没有用。

[menu setTargetRect:cell.bounds inView:parentControllerView];

有人可以建议我如何解决这个问题吗?如果我的问题不明确或需要更多细节,请告诉我。

2 个答案:

答案 0 :(得分:1)

当您将单元格的父视图设置为显示菜单时,您的菜单显示在单元格的底部,父视图的高度无法在单元格下方显示您的菜单,因此它显示重叠您的单元格。  因此,如果您想要在单元格下方显示菜单而不是它,则必须更改菜单显示的视图.set

[menu setTargetRect:cell.bounds inView:[UIApplication sharedApplication] window];

这将在应用程序的主窗口中显示您的菜单。

答案 1 :(得分:0)

当您尝试在菜单上方显示菜单时会出现问题,导致菜单显示在导航栏的上方。 iOS不希望将其显示在导航栏上方,而是将其向下推。如果您的项目在屏幕上较低,它将正确显示在视图上方并按预期指向它。可能值得在bugreport.apple.com上提交错误报告,要求菜单显示在导航栏的上方。

此外,最好使用单元格的边界作为目标矩形,使用视图的单元格而不是父控制器的视图,如下所示:

[menu setTargetRect:cell.bounds inView:cell];

现在,我找到了一种解决方法,强制菜单显示在导航栏上。不要将单元格的边界设置为目标矩形,而是自己将其向下推。出于某种原因,这样做会阻止iOS在导航栏上显示时将其推下来。

[menu setTargetRect:CGRectMake(0, 10, cell.bounds.width, cell.bounds.height - 10) inView:cell];