iOS 13 은 모달로 제공되는 뷰 컨트롤러를위한 새로운 디자인 modalPresentationStyle
.pageSheet
(및 그 형제 .formSheet
)을 도입했습니다 .
… 그리고 제시된 뷰 컨트롤러를 아래로 밀어서이 시트를 닫을 수 있습니다 (대화식 닫힘) . 새로운 “pull-to-dismiss”기능은 매우 유용하지만 항상 바람직한 것은 아닙니다.
질문 : 대화 형 해고를 어떻게 끌 수 있습니까?
-프레젠테이션 스타일은 동일하게 유지됩니다.
답변
옵션 1:
viewController.isModalInPresentation = true
(비활성화 된 대화 형 .pageSheet
해고는 이와 같이 작동합니다.)
- iOS 13부터는 대화 형 해제를 방지하기 위해 로 설정해야하는
UIViewController
새 속성이 포함되어 있습니다 .isModalInPresentation
true
- 기본적으로 뷰 컨트롤러의 경계를 벗어난 이벤트를 무시합니다. 자동 스타일뿐만 아니라 프레젠테이션 스타일
.popover
등을 사용하는 경우 유의하십시오 . - 이 속성은
false
기본적으로 사용됩니다.
로부터 공식 문서 : 만약
true
이 화면에있는 동안, UIKit은 뷰 컨트롤러의 경계 및 방지 외부 뷰 컨트롤러의 상호 작용 해고 이벤트를 무시합니다.
옵션 2 :
func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
return false
}
- 아이폰 OS (13) 때문에,
UIAdaptivePresentationControllerDelegate
라고하는 새로운 방법을 포함presentationControllerShouldDismiss
. - 이 메서드는 제공된 뷰 컨트롤러가 프로그래밍 방식으로 해제되지 않고
isModalInPresentation
속성이로 설정된 경우에만 호출됩니다false
.
팁 : presentationController의 델리게이트를 지정하는 것을 잊지 마십시오.
답변
-
전체 화면의 모델 프리젠 테이션과 같이 이전 iOS 버전 (<iOS13)에서와 동일한 동작을 원하면 대상 뷰 컨트롤러의 프리젠 테이션 스타일을 다음으로 설정하십시오.
UIModalPresentationStyle.fullScreen
let someViewController = \*VIEW CONTROLLER*\ someViewController.modalPresentationStyle = .fullScreen
스토리 보드를 사용하는 경우 segua를 선택
Full Screen
하고Presentation
드롭 다운 에서 선택하십시오. -
대화 형 해제를 비활성화하고 새 프레젠테이션 스타일 설정
UIViewController
속성isModalInPresentation
을true
.if #available(iOS 13.0, *) { someViewController.isModalInPresentation = true // available in IOS13 }
답변
숙소 isModalInPresentation
가 도움 이 될 수 있습니다.
문서에서 :
로 설정하면
true
UIKit은 뷰 컨트롤러의 경계를 벗어난 이벤트를 무시하고 화면에있는 동안 뷰 컨트롤러의 대화 형 해제를 방지합니다.
다음과 같이 사용할 수 있습니다.
let controller = MyViewController()
controller.isModalInPresentation = true
self.present(controller, animated: true, completion: nil)
답변
스토리 보드를 사용하여 UI를 레이아웃하는 경우 탐색 컨트롤러를 사용할 때이 대화 형 해제를 비활성화하는 가장 좋은 방법은 속성 검사기에서 탐색 컨트롤러의 표시를 자동에서 전체 화면으로 변경하는 것입니다. 그러면 내비게이션 스택의 모든보기 컨트롤러가 전체 화면이되고 사용자가 닫을 수 없습니다.