iOS 13 wprowadza nowy projekt modalPresentationStyle
.pageSheet
(i jego odpowiednika .formSheet
) dla kontrolerów widoku prezentowanych modalnie…
… I możemy odrzucić te arkusze, przesuwając kontroler prezentowanego widoku w dół (interaktywne zamknięcie ) . Chociaż nowa funkcja „ściągnij, aby odrzucić” jest całkiem przydatna, nie zawsze może być pożądana.
PYTANIE: Jak możemy wyłączyć interaktywne zwolnienie? - Pamiętaj, że styl prezentacji pozostaje taki sam.
ios
uiviewcontroller
uikit
modalviewcontroller
ios13
Jakub Truhlář
źródło
źródło
Odpowiedzi:
Opcja 1:
(Wyłączone interaktywne
.pageSheet
zwolnienie działa w ten sposób).UIViewController
zawiera nową właściwość o nazwie,isModalInPresentation
która musi być ustawiona,true
aby zapobiec interaktywnemu odrzuceniu..popover
itp.false
domyślna.Opcja 2:
UIAdaptivePresentationControllerDelegate
zawiera nową metodę o nazwiepresentationControllerShouldDismiss
.isModalInPresentation
właściwość jest ustawiona nafalse
.źródło
isModalInPresentation
go w kontrolerze nawigacji lub w poszczególnych kontrolerach widoku wyświetlanych w stosie nawigacji. Ta ostatnia pozwala wybrać na ekranie po ekranie, czy możliwe jest interaktywne zwolnienie. Ostrożnie w przypadku kontrolerów wyszukiwania, mają one pierwszeństwo przed indywidualnym kontrolerem widoku (ale nie kontrolerem nawigacji). Więcej informacji w moim poście na blogu: medium.com/@hacknicity/…viewController.modalInPresentation = YES;
UIImagePickerController
? Dla nas wygląda naUIImagePickerController
to, że ignoruje go, więc można go odrzucić za pomocą gestu machnięcia. Może to błąd iOS 13.presentationControllerShouldDismiss(_ presentationController: UIPresentationController)
zwraca false,presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController)
jest wywoływane, więc możesz na przykład dodać okno dialogowe potwierdzenia, jeśli użytkownik wprowadził dane.Jeśli chcesz zachować to samo zachowanie, co w poprzedniej wersji iOS (<iOS13), takie jak prezentacja modelu na pełnym ekranie, po prostu ustaw styl prezentacji kontrolera widoku docelowego na
UIModalPresentationStyle.fullScreen
A jeśli używasz storyboardu, po prostu wybierz segua i wybierz z
Full Screen
listyPresentation
rozwijanej.Jeśli chcesz po prostu wyłączyć interaktywną odwoływania i zachować nowy styl prezentacji określoną
UIViewController
właściwośćisModalInPresentation
dotrue
.źródło
Nieruchomość
isModalInPresentation
może pomóc.Z dokumentacji:
Możesz go używać w ten sposób:
źródło
Jeśli używasz scenorysów do układania interfejsu użytkownika, znalazłem najlepszy sposób na wyłączenie tego interaktywnego odrzucania podczas korzystania z kontrolera nawigacyjnego, aby zmienić prezentację kontrolera nawigacji w inspektorze atrybutów z automatycznego na pełny ekran. Wszystkie kontrolery widoku w stosie nawigacyjnym będą wtedy pełnoekranowe i nie będą mogły zostać odrzucone przez użytkownika.
Inspektor atrybutów przedstawiający opcję prezentacji dla kontrolera nawigacji
źródło
Apple udostępnił przykładowy kod na ten temat pod tym linkiem
Wykorzystuje
isModalInPresentation
sugestie wielu użytkowników.źródło