ios - La vista previa Peek/Pop ignora el radio de la esquina de la celda en la vista de colección
swift uicollectionview (1)
Como te entiendo correctamente, quieres tener algo como primero, en lugar de segundo:
El problema es que registra notificaciones en vista completa. Algo como esto: registerForPreviewingWithDelegate(self, sourceView: self.view)
, que registerForPreviewingWithDelegate(self, sourceView: self.view)
por qué su área tocada no sabe nada acerca de la capa de celda.
Lo que debe hacer: registrar cada celda personalmente:
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)
}
}
Y simplemente cambie previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView)
a previewingContext.sourceRect = cell.bounds
PS Por supuesto, no te olvides de eliminar registerForPreviewingWithDelegate
en tu vista :)
He agregado la funcionalidad 3D Touch Peek / Pop a mis celdas de vista de colección y funciona muy bien, sin embargo, he notado que el marco de vista previa no respeta el radio de la esquina de las celdas.
Aquí está mi función de vista previa:
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
}
Intenté establecer el radio de la esquina de previewViewContext sourceView y jugar con masksToBounds en la celda, pero nada de lo que he intentado hasta ahora me ha ayudado.
Aquí está la configuración de la celda:
override func awakeFromNib() {
self.layer.cornerRadius = 7
}
¿Alguien tiene alguna sugerencia?