Peek / Pop预览会忽略集合视图中的单元格角半径

我已将3D Touch Peek / Popfunction添加到我的集合视图单元格中并且效果很好,但是我注意到预览框架不尊重单元格的角半径。

这是我的预览function:

func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { let viewController = storyboard?.instantiateViewControllerWithIdentifier("scholarDetailViewController") as? ScholarDetailViewController let cellPosition = self.scholarsCollectionView.convertPoint(location, fromView: self.view) let cellIndex = self.scholarsCollectionView.indexPathForItemAtPoint(cellPosition) guard let previewViewController = viewController, indexPath = cellIndex, cell = self.scholarsCollectionView.cellForItemAtIndexPath(indexPath) else { return nil } let scholar = self.searchBarActive ? self.searchResults[indexPath.item] as! Scholar : self.currentScholars[indexPath.item] previewViewController.setScholar(scholar.id) previewViewController.delegate = self previewViewController.preferredContentSize = CGSize.zero previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView) return previewViewController } 

我已经尝试设置previewingContext sourceView的角半径并在单元格上使用masksToBounds,但到目前为止我没有尝试过任何帮助。

这是单元设置:

 override func awakeFromNib() { self.layer.cornerRadius = 7 } 

有人有什么建议吗?

正如我理解你的那样,你想要的是第一个而不是第二个:

正确对象,真爱 错了

问题是您在整个视图上注册通知。 像这样: registerForPreviewingWithDelegate(self, sourceView: self.view) ,这就是为什么你的触摸区域对单元层一无所知。

你应该做什么 – 亲自登记每个细胞:

 func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) { let previwingController = registerForPreviewingWithDelegate(self, sourceView: cell) previwingControllers[cell] = previwingController } func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) { if let previwingController = previwingControllers[cell] { unregisterForPreviewingWithContext(previwingController) } } 

只需将previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView) previewingContext.sourceRect = cell.bounds previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView)更改previewingContext.sourceRect = cell.bounds

PS当然不要忘记在你的视图上删除registerForPreviewingWithDelegate 🙂