[Q&A] Можно ли глобально изменить значение UIViewController.modalPresentationStyle
в iOS 13, чтобы оно работало так же, как в iOS 12 (или более ранней версии)?
Почему?
В iOS 13 SDK значение свойства UIViewController.modalPresentationStyle
по умолчанию было изменено с UIModalPresentationFullScreen
на UIModalPresentationAutomatic
, что, насколько мне известно, разрешено до UIModalPresentationPageSheet
на устройствах iOS или, по крайней мере, на iPhone.
Поскольку проект, над которым я работаю несколько лет, стал довольно большим, есть десятки мест, где представлен контроллер представления. Новый стиль презентации не всегда соответствует дизайну нашего приложения, а иногда и приводит к разложению пользовательского интерфейса. Вот почему мы решили изменить UIViewController.modalPresentationStyle
обратно на UIModalPresentationFullScreen
, как это было в версиях SDK до iOS13.
Но добавление viewController.modalPresentationStyle = UIModalPresentationFullScreen
перед вызовом presentViewController:animated:completion:
в каждом месте, где представлен контроллер, казалось излишним. Более того, в то время у нас были более серьезные вопросы, поэтому на данный момент или, по крайней мере, до тех пор, пока мы не обновим наши дизайны и не исправим все проблемы пользовательского интерфейса, мы решили пойти на смену методов.
В моем ответе представлено рабочее решение, но я буду признателен за любые отзывы, которые расскажут мне, какие могут быть недостатки или последствия такого подхода.
viewController.modalPresentationStyle
на.pageSheet
и вызываетеself.swizzled_present(:,:,:)
. Может быть, это не очень красиво, но вся суть этого поста основана на предположении, что у вас уже есть существующий проект с множеством вызовов модальной презентации, и вы хотите восстановить поведение до iOS13, не обновляя каждую строку кода. 18.11.2019