详细视图控制器支持peek模式。当我们以peek模式显示详细控制器时,我们需要在详细控制器中禁用工具提示/教程。我们如何识别视图控制器是以窥视模式还是全屏模式显示?
答案 0 :(得分:5)
有一种不完美但实用的方法可以做到这一点。在许多情况下,除了peek模式之外,仅使用UINavigationController
和/或UITabBarController
。你可以通过这个来识别偷看模式。
let isPeeking = navigationController == nil
// or
let isPeeking = tabBarController == nil
答案 1 :(得分: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
}
然后,在详细视图控制器内部,启用/禁用您需要的任何内容。
答案 2 :(得分:0)
没有直接的方法可以确定,但是当您在方法preferredContentSize
中设置窥视func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
时,您可以为视图的宽度设置观察者。
然后参考视图控制器的宽度。如果它与您的preferredContentSize相同(或小于UIScreen宽度),则处于peek模式,否则会弹出。
答案 3 :(得分:0)
您可以使用屏幕尺寸
检查窥视视图控制器的高度override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let screen = UIScreen.main.bounds
if view.frame.height == screen.height {
// NOT peek mode
} else {
// Peek mode
}
}