3

У меня есть стандарт UISplitViewController, с навигационными контроллерами как в его мастер-панели, так и в деталях. В большинстве случаев контроллер разделенного вида имеет свой preferredDisplayMode, установленный на .allVisible, так что видны мастер и детали.Настройка UISplitViewController's preferredDisplayMode при нажатии на подробную навигацию

Когда я нажимаю определенный контроллер просмотра на стек навигационной детали, я бы хотел скрыть мастер-панель, чтобы у пользователя было больше «полного экрана». Чтобы реализовать это, я попытался изменить preferredDisplayMode на .primaryHidden в viewWillAppear контроллера подробного представления и изменить его обратно в viewWillDisappear. Однако это приводит к очень плохой анимации и неправильному размещению просмотров в конце перехода.

Incorrect animation

Я не уверен, как это исправить. Я попытался изменить режим отображения в разное время, поставив вызов на изменение preferredDisplayMode в блок анимации (хотя он и неявно анимирован), и попросил взглянуть на контроллер контроллера. Он выглядит немного лучше в блоке анимации, и представления в конечном итоге правильно размещены, но анимация по-прежнему выглядит странно и нервно.

Итак, как исправить анимацию и достичь внешнего вида, который я ищу?

Я собрал minimal sample project, чтобы продемонстрировать проблему. Просто нажмите кнопку «Push» в контроллере подробного представления, чтобы представить контроллер вида, который перенастраивает контроллер разделенного представления.

ответ

0

Попробуйте использовать prepareForSegue в DetailViewController. Это изменит .preferredDisplayStyle вашего UISplitViewControllerдо, представляя FullscreenViewController с более плавной анимацией.

В раскадровке, то выберите шоу SEGUE от кнопки «толчок» к FullscreenViewController и установить его идентификатор (я всегда использую имя назначения ViewController.) Тогда в DetailViewController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "FullscreenViewController" { 
     self.splitViewController?.preferredDisplayMode = .primaryHidden 
    } 
} 

Для быстрое решение при навигации 'назад' в DetailViewController, я добавил

self.splitViewController?.preferredDisplayMode = .allVisible 

к viewWillAppear в DetailViewController. Обычно я использую делегат для передачи данных между контроллерами представлений и установки режима отображения там. Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^