UIViewControllerPreviewing偷看没有显示我的预览

时间:2017-11-10 05:23:52

标签: swift xcode 3dtouch

我遇到UIViewControllerPreviewing API问题。它在以前版本的应用程序(iOS?)中运行良好,但我只是注意到它在当前版本中不再有效。

我没有更改任何特定的内容(只是迁移到Swift 4和这种更改),但这种情况发生在整个应用程序中(不仅仅是示例下方),代表4-5 不同强制触摸偷看和弹出。

当我强行触摸我的收藏视图上的一个单元格时,这就是我所看到的。模糊发生但我的预览视图控制器没有出现。 What I see when force touching

请注意,pop工作正常,我的视图控制器配置良好,会被推送到导航堆栈。

我尝试使用Xcode的UI调试器,似乎我的预览视图控制器的视图没有给出大小,很奇怪。 enter image description here

这是我的代码:

extension HomeViewController: UIViewControllerPreviewingDelegate {

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        guard let indexPath = collectionView.indexPathForItem(at: location), let cell = collectionView.cellForItem(at: indexPath) as? MyCell else {
            return nil
        }

        // Configure previewing context
        let viewRectInCollectionView = collectionView.convert(cell.frame, from: coverImageView.superview!)
        previewingContext.sourceRect = viewRectInCollectionView

        // Generate cover view
        let viewController = MyViewController(/* some parameters */)

        return viewController
    }

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
        navigationController?.pushViewController(viewControllerToCommit, animated: true)
    }

}

我还试图提供首选内容大小,但它没有改变任何内容:

viewController.preferredContentSize = CGSize(width: 300.0, height: 300.0)
// or
viewController.preferredContentSize = CGSize(width: 0.0, height: 300.0)

我很乐意收到有关尝试的建议,或者您已经在应用中修复了此问题的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

也许代替:

previewingContext.sourceRect = viewRectInCollectionView

尝试:

previewingContext.sourceRect = cell.frame

使用collectionView.convert()时出现类似问题。