详细视图控制器支持窥视模式。当我们以 peek 模式显示详细控制器时,我们需要禁用详细控制器的工具提示/教程。我们如何识别视图控制器是以窥视模式还是全屏模式显示?
问问题
1853 次
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 回答