2

详细视图控制器支持窥视模式。当我们以 peek 模式显示详细控制器时,我们需要禁用详细控制器的工具提示/教程。我们如何识别视图控制器是以窥视模式还是全屏模式显示?

4

4 回答 4

5

有一种不完美但实用的方法可以做到这一点。在许多情况下UINavigationController和/或UITabBarController仅用于窥视模式。您可以通过此识别窥视模式。

let isPeeking = navigationController == nil
// or
let isPeeking = tabBarController == nil
于 2017-07-03T05:26:09.813 回答
3

当你在UIViewControllerPreviewing委托方法中实例化你的视图控制器时,你可以设置一个变量来告诉它它在什么上下文中。然后在你的视图控制器代码中做出相应的响应。

public func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    //...

    let sb = UIStoryboard(name: "DocumentViewer", bundle: nil)
    guard let detailViewController = 
        sb.instantiateViewControllerWithIdentifier("DocumentViewerViewController") 
        as? DocumentViewerViewController else { return nil }

    detailViewController.isPeeking = true // <--- Set variable here

    // Other stuff here...

    detailViewController.preferredContentSize = CGSize(width: 0.0, height: 380.0)
    previewingContext.sourceRect = cell.frame

    return detailViewController
}

然后,在详细视图控制器内部,启用/禁用您需要的任何内容。

于 2015-12-03T16:04:25.653 回答
0

没有直接的方法来确定这一点,但是当您设置窥视preferredContentSize方法 时,func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?您可以为视图的宽度设置观察者。

然后参考您的视图控制器的宽度。如果它与您的 preferredContentSize 相同(或小于 UIScreen 宽度),则它处于 peek 模式,否则它已弹出。

于 2015-11-21T08:07:49.013 回答
0

您可以使用屏幕尺寸检查窥视视图控制器的高度

override func viewDidLayoutSubviews() {

   super.viewDidLayoutSubviews()

   let screen = UIScreen.main.bounds
   if view.frame.height == screen.height { 
      // NOT peek mode
   } else {
      // Peek mode
   }

}
于 2017-05-09T13:43:14.127 回答