UIModalPresentationPopover 的箭头不指向 UICollectionViewCell
Posted
技术标签:
【中文标题】UIModalPresentationPopover 的箭头不指向 UICollectionViewCell【英文标题】:Arrow of UIModalPresentationPopover does not point to UICollectionViewCell 【发布时间】:2018-02-01 17:42:16 【问题描述】:我正在尝试显示指向UICollectionViewCell
的详细视图弹出框。弹出框总是从左上角显示。如何让它将箭头指向选定的单元格?代码如下:
-(void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
JCCollectionData *favorite = [self.dataSource objectAtIndex:indexPath.row];
JCCollectionCellView *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];
JCContactDetailViewController *contactDetail = [[JCContactDetailViewController alloc] init];
contactDetail.Contact = favorite;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:contactDetail];
nav.modalPresentationStyle = UIModalPresentationPopover;
nav.popoverPresentationController.delegate = self;
nav.popoverPresentationController.sourceView = cell;
nav.popoverPresentationController.sourceRect = [collectionView layoutAttributesForItemAtIndexPath:indexPath].frame;
nav.preferredContentSize = CGSizeMake(500, 400);
nav.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
[self presentViewController:nav animated:YES completion:nil];
【问题讨论】:
【参考方案1】:这是因为在这两行中:
nav.popoverPresentationController.sourceView = cell;
nav.popoverPresentationController.sourceRect = [collectionView layoutAttributesForItemAtIndexPath:indexPath].frame;
您是说源视图是单元格,然后将单元格的框架作为源矩形,这将与它的超级视图而不是自身相关。
相反,您可以cell.bounds
或只是构建一个 CGRect,它的原点位于 0,0 并且单元格框架的大小。
编辑
我刚刚注意到别的东西。你有这行:
JCCollectionCellView *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];
这是使单元格的一个新实例出列,而没有得到作为选择源的单元格。
相反,您应该这样做:
JCCollectionCellView *cell = (JCCollectionCellView*)[collectionView cellForItemAtIndexPath:indexPath];
这应该会让你得到生成选择的实际单元格。
(我认为语法是正确的,但我的 Objective C 变得有点生疏了,因为我全职使用 Swift。不过应该足以让你指出正确的方向。)
【讨论】:
我刚刚重新尝试了 cell.bounds 并尝试了 CGRectMake(0, 0, 40, 40)。在这两种情况下,从左上角显示的结果仍然相同。 ist 是否与复杂的视图层次结构有关? 抱歉只看到评论。我刚刚注意到别的东西,所以我会更新答案。 哇!我自己都瞎了眼。非常感谢!以上是关于UIModalPresentationPopover 的箭头不指向 UICollectionViewCell的主要内容,如果未能解决你的问题,请参考以下文章