Как проверить, находится ли контроллер вида в режиме просмотра [3D Touch] или в полноэкранном режиме в iOS
Контроллер подробного просмотра поддерживает режим просмотра. когда мы отображаем подробный контроллер в режиме просмотра, нам нужно отключить всплывающие подсказки / учебник в подробном контроллере. Как определить, отображается ли контроллер представления в режиме просмотра или в полноэкранном режиме?
4 ответа
Когда вы создаете экземпляр своего контроллера представления в 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
}
Затем в контроллере подробного представления включите / отключите все, что вам нужно.
Существует не идеальный, но практичный способ сделать это. Во многих случаях UINavigationController
и / или UITabBarController
используется только за исключением режима просмотра. Вы можете определить режим просмотра по этому.
let isPeeking = navigationController == nil
// or
let isPeeking = tabBarController == nil
Там нет прямого способа определить это, но вы, когда вы установите свой взгляд preferredContentSize
в методе func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
Вы можете установить наблюдателя для ширины вашего вида.
Затем обратитесь к ширине вашего контроллера представления. Если он такой же, как ваш предпочитаемый параметр ContentSize (или меньше ширины UIScreen), он находится в режиме просмотра, в противном случае он выскочил.
Вы можете проверить высоту вашего заглядывания контроллера с размером экрана
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let screen = UIScreen.main.bounds
if view.frame.height == screen.height {
// NOT peek mode
} else {
// Peek mode
}
}