iOS 13 представляет новый дизайн modalPresentationStyle
.pageSheet
(и его родственника .formSheet
) для модально представленных контроллеров представления…
… И мы можем отклонить эти листы, сдвинув представленный контроллер представления вниз (интерактивное отклонение) . Хотя новая функция «потянуть и закрыть» довольно полезна, она не всегда может быть желательной.
ВОПРОС: Как отключить интерактивное увольнение? - Имейте в виду, что мы сохраняем стиль презентации.
ios
uiviewcontroller
uikit
modalviewcontroller
ios13
Якуб Трухларж
источник
источник
Ответы:
Опция 1:
(Отключенное интерактивное
.pageSheet
увольнение действует так.)UIViewController
содержит новое свойство с именем,isModalInPresentation
которое необходимо установитьtrue
для предотвращения интерактивного увольнения..popover
и т. Д.false
по умолчанию.Вариант 2:
UIAdaptivePresentationControllerDelegate
содержит новый метод с именемpresentationControllerShouldDismiss
.isModalInPresentation
свойства установлено значениеfalse
.источник
isModalInPresentation
на контроллере навигации, либо на отдельных контроллерах представления, показанных в стеке навигации. Последний позволяет вам по очереди выбирать, возможно ли интерактивное увольнение. Осторожно с контроллерами поиска, они имеют приоритет над отдельным контроллером представления (но не контроллером навигации). Более подробная информация в моем сообщении в блоге: medium.com/@hacknicity/…viewController.modalInPresentation = YES;
UIImagePickerController
? Для нас это выглядит так, как будтоUIImagePickerController
он игнорирует это, и поэтому его можно закрыть жестом смахивания. Может это ошибка iOS 13.presentationControllerShouldDismiss(_ presentationController: UIPresentationController)
возвращается false,presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController)
вызывается, чтобы вы могли делать такие вещи, как добавление диалогового окна подтверждения, если пользователь ввел данные.Если вам нужно такое же поведение, как в предыдущей версии iOS (<iOS13), например, представление модели в полноэкранном режиме, просто установите стиль представления вашего целевого контроллера представления на
UIModalPresentationStyle.fullScreen
А если вы используете раскадровку, просто выберите сегуа и выберите
Full Screen
изPresentation
раскрывающегося списка.Если вы просто хотите отключить интерактивное увольнение и оставить для
UIViewController
свойства нового стиля презентацииisModalInPresentation
значениеtrue
.источник
Собственность
isModalInPresentation
может помочь.Из документации:
Вы можете использовать это так:
источник
Если вы используете раскадровки для компоновки своего пользовательского интерфейса, я нашел лучший способ отключить это интерактивное отклонение при использовании контроллера навигации - это изменить представление контроллера навигации в инспекторе атрибутов с автоматического на полноэкранный. После этого все контроллеры представлений в стеке навигации будут работать в полноэкранном режиме, и пользователь не сможет их закрыть.
Инспектор атрибутов, показывающий вариант представления для контроллера навигации
источник
Apple поделилась образцом кода по этой ссылке
Он использует
isModalInPresentation
как можно больше предложений пользователей.источник