[ios] 네비게이션 바를 포함하여 무엇보다도 UIView를 추가하십시오.

다른보기들, 심지어 네비게이션 바까지 다음과 같은 일종의 “팝업”보기를 표시하고 싶습니다 :

  • 전체 화면 검정색 배경과 0.5 알파를 사용하여 UIViewController아래 에 다른 화면을 표시합니다 .
  • UIView정보가있는 중간에 있는 창 (모든 것을 알고 싶다면 달력).

이를 위해 두 UIViews(배경 및 창) 가 포함 된 UIViewController를 만들었으며 표시하려고합니다. 나는 간단한 시도 [mySuperVC addSubview:myPopUpVC.view]했지만 여전히 위의 탐색 표시 줄이 있습니다.

나는 그것을 모달로 제시하려고했지만 UIViewController밑면이 사라지고 투명도 효과를 잃습니다.

이 작업을 수행하는 아이디어는 매우 간단합니다.

감사!



답변

keyWindow에 직접 뷰를 추가하면됩니다.

UIView *myView = /* <- Your custom view */;
UIWindow *currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:myView];

업데이트-Swift 4.1 이상

let currentWindow: UIWindow? = UIApplication.shared.keyWindow
currentWindow?.addSubview(myView)


답변

[self.navigationController.view addSubview:overlayView]; 당신이 정말로 원하는 것입니다


답변

나를 위해 일하는 간단한 우아한 솔루션이 있습니다. 탐색 표시 줄의 z 위치를보기 아래로 설정할 수 있습니다.

self.navigationController.navigationBar.layer.zPosition = -1;

완료되면 다시 0으로 설정하십시오.


답변

확인 된 응답의 신속한 버전 :

스위프트 4 :

let view = UIView()
view.frame = UIApplication.shared.keyWindow!.frame
UIApplication.shared.keyWindow!.addSubview(view)

스위프트 3.1 :

let view = UIView()
view.frame = UIApplication.sharedApplication().keyWindow!.frame
UIApplication.sharedApplication().keyWindow!.addSubview(view)


답변

NavigationController의 하위보기로 추가하십시오.

[self.navigationController.navigationBar addSubview: overlayView)]

창 위에 추가 할 수도 있습니다.

UIView *view = /* Your custom view */;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window addSubview:view];

도움이 되었기를 바랍니다.. 🙂


답변

빠른 Dalef 훌륭한 솔루션 :

self.navigationController?.view.addSubview(view)


답변

@Nam의 답변은 사용자 정의보기를 표시하고 싶지만 사용자 정의보기에 사용자 상호 작용이 필요한 경우에 대한 상호 작용을 비활성화해야합니다navigationBar .

self.navigationController.navigationBar.layer.zPosition = -1
self.navigationController.navigationBar.isUserInteractionEnabled = false

Nam의 답변에서 말했듯이 이러한 변경 사항을 되 돌리는 것을 잊지 마십시오.

self.navigationController.navigationBar.layer.zPosition = 0
self.navigationController.navigationBar.isUserInteractionEnabled = true


확장 기능으로 더 나은 방법으로이를 수행 할 수 있습니다.

extension UINavigationBar {
    func toggle() {
        if self.layer.zPosition == -1 {
            self.layer.zPosition = 0
            self.isUserInteractionEnabled = true
        } else {
            self.layer.zPosition = -1
            self.isUserInteractionEnabled = false
        }
    }
}

그리고 간단히 다음과 같이 사용하십시오.

self.navigationController.navigationBar.toggle()