Как проверить, находится ли контроллер вида в режиме просмотра [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
   }

}
Другие вопросы по тегам