[ios] iOS 13에서 제시된 뷰 컨트롤러의 대화 형 해제 비활성화

iOS 13 은 모달로 제공되는 뷰 컨트롤러를위한 새로운 디자인 modalPresentationStyle .pageSheet(및 그 형제 .formSheet)을 도입했습니다 .

iOS 13의 새로운 슬라이딩 모달 프레젠테이션

… 그리고 제시된 뷰 컨트롤러를 아래로 밀어서이 시트를 닫을 수 있습니다 (대화식 닫힘) . 새로운 “pull-to-dismiss”기능은 매우 유용하지만 항상 바람직한 것은 아닙니다.

질문 : 대화 형 해고를 어떻게 끌 수 있습니까?
-프레젠테이션 스타일은 동일하게 유지됩니다.



답변

옵션 1:

viewController.isModalInPresentation = true

대화식 해고 비활성화

(비활성화 된 대화 형 .pageSheet해고는 이와 같이 작동합니다.)

  • iOS 13부터는 대화 형 해제를 방지하기 위해 로 설정해야하는 UIViewController새 속성이 포함되어 있습니다 .isModalInPresentationtrue
  • 기본적으로 뷰 컨트롤러의 경계를 벗어난 이벤트를 무시합니다. 자동 스타일뿐만 아니라 프레젠테이션 스타일 .popover등을 사용하는 경우 유의하십시오 .
  • 이 속성은 false기본적으로 사용됩니다.

로부터 공식 문서 : 만약 true이 화면에있는 동안, UIKit은 뷰 컨트롤러의 경계 및 방지 외부 뷰 컨트롤러의 상호 작용 해고 이벤트를 무시합니다.


옵션 2 :

func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
    return false
}
  • 아이폰 OS (13) 때문에, UIAdaptivePresentationControllerDelegate라고하는 새로운 방법을 포함 presentationControllerShouldDismiss.
  • 이 메서드는 제공된 뷰 컨트롤러가 프로그래밍 방식으로 해제되지 않고 isModalInPresentation속성이로 설정된 경우에만 호출됩니다 false.

팁 : presentationController의 델리게이트를 지정하는 것을 잊지 마십시오.


답변

  1. 전체 화면의 모델 프리젠 테이션과 같이 이전 iOS 버전 (<iOS13)에서와 동일한 동작을 원하면 대상 뷰 컨트롤러의 프리젠 테이션 스타일을 다음으로 설정하십시오. UIModalPresentationStyle.fullScreen

    let someViewController = \*VIEW CONTROLLER*\
    someViewController.modalPresentationStyle = .fullScreen

    스토리 보드를 사용하는 경우 segua를 선택 Full Screen하고 Presentation드롭 다운 에서 선택하십시오.

    여기에 이미지 설명 입력

  2. 대화 형 해제를 비활성화하고 새 프레젠테이션 스타일 설정 UIViewController속성 isModalInPresentationtrue.

    if #available(iOS 13.0, *) {
        someViewController.isModalInPresentation = true // available in IOS13
    }

답변

숙소 isModalInPresentation가 도움 이 될 수 있습니다.

문서에서 :

로 설정하면 trueUIKit은 뷰 컨트롤러의 경계를 벗어난 이벤트를 무시하고 화면에있는 동안 뷰 컨트롤러의 대화 형 해제를 방지합니다.

다음과 같이 사용할 수 있습니다.

let controller = MyViewController()
controller.isModalInPresentation = true
self.present(controller, animated: true, completion: nil)


답변

스토리 보드를 사용하여 UI를 레이아웃하는 경우 탐색 컨트롤러를 사용할 때이 대화 형 해제를 비활성화하는 가장 좋은 방법은 속성 검사기에서 탐색 컨트롤러의 표시를 자동에서 전체 화면으로 변경하는 것입니다. 그러면 내비게이션 스택의 모든보기 컨트롤러가 전체 화면이되고 사용자가 닫을 수 없습니다.

내비게이션 컨트롤러의 프레젠테이션 옵션을 보여주는 속성 검사기


답변

Apple 은이 링크에서 이에 대한 샘플 코드를 공유했습니다.

그것은 isModalInPresentation많은 사용자 제안을 사용합니다.


답변