O iOS 13 apresenta um novo design modalPresentationStyle
.pageSheet
(e seu irmão .formSheet
) para os controladores de exibição apresentados de forma modal…
... e podemos descartar essas folhas deslizando o controlador de exibição apresentado para baixo (dispensação interativa) . Embora o novo recurso "puxar para demitir" seja bastante útil, nem sempre é desejável.
A PERGUNTA: Como podemos desativar a dispensa interativa? - Lembre-se de manter o mesmo estilo de apresentação.
ios
uiviewcontroller
uikit
modalviewcontroller
ios13
Jakub Truhlář
fonte
fonte
Respostas:
Opção 1:
(A
.pageSheet
dispensação interativa desativada age assim).UIViewController
contém uma nova propriedade chamadaisModalInPresentation
que deve ser configuradatrue
para impedir a dispensa interativa..popover
etc.false
por padrão.Opção 2:
UIAdaptivePresentationControllerDelegate
contém um novo método chamadopresentationControllerShouldDismiss
.isModalInPresentation
propriedade é definida comofalse
.fonte
isModalInPresentation
no controlador de navegação ou nos controladores de exibição individuais mostrados na pilha de navegação. O último permite que você escolha, tela por tela, se a demissão interativa é possível. Cuidado com os controladores de pesquisa, eles têm precedência sobre o controlador de exibição individual (mas não o controlador de navegação). Mais informações no meu blog: medium.com/@hacknicity/...viewController.modalInPresentation = YES;
UIImagePickerController
? Para nós, parece que oUIImagePickerController
está ignorando e pode ser descartado com o gesto de deslizar. Talvez seja um bug do iOS 13.presentationControllerShouldDismiss(_ presentationController: UIPresentationController)
retorna false,presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController)
é chamado para que você possa fazer coisas como adicionar um diálogo de confirmação se o usuário tiver inserido dados.Se você deseja o mesmo comportamento da versão anterior do iOS (<iOS13), como a apresentação do modelo em tela cheia, basta definir o estilo de apresentação do seu controlador de exibição de destino como
UIModalPresentationStyle.fullScreen
E se você estiver usando o storyboard, selecione a seguinte e selecione
Full Screen
aPresentation
lista suspensa.Se você quiser apenas desativar a demissão interativo e manter o novo conjunto estilo de apresentação
UIViewController
propriedadeisModalInPresentation
paratrue
.fonte
A propriedade
isModalInPresentation
pode ajudar.A partir da documentação:
Você pode usá-lo assim:
fonte
Se você estiver usando storyboards para planejar sua interface do usuário, encontrei a melhor maneira de desativar essa dispensa interativa ao usar um controlador de navegação: alterar a apresentação do controlador de navegação no inspetor de atributos, de automático para tela cheia. Todos os controladores de exibição em sua pilha de navegação serão exibidos em tela cheia e não poderão ser descartados pelo usuário.
Inspetor de atributos mostrando a opção de apresentação para o controlador de navegação
fonte
A Apple compartilhou um código de amostra sobre ele neste link
Ele usa a
isModalInPresentation
sugestão de muitos usuários.fonte