source

탐색 모음을 포함하여 무엇보다도 UI 보기

ittop 2023. 4. 27. 22:44
반응형

탐색 모음을 포함하여 무엇보다도 UI 보기

다른 보기보다 탐색 모음에서 다음과 같은 "팝업" 보기를 표시합니다.

  • 전체 화면 검은색 배경과 0.5알파를 사용하여 다른 것을 볼 수 있습니다.UIViewController밑에
  • a UIView정보가 있는 가운데 창(모든 것을 알고 싶다면 달력).

이를 위해 두 가지 기능이 포함된 UIViewController를 만들었습니다.UIViews(배경 및 창)을 표시하려고 합니다.나는 간단한 것을 시도했습니다.[mySuperVC addSubview:myPopUpVC.view]위에 내비게이션 바를 아직 가지고 있어요

모달로 표현하려고 노력했지만,UIViewController그 밑이 사라지고, 투명성 효과를 잃게 됩니다.

이 일을 할 방법이 있다면, 꽤 간단할 것입니다.

감사합니다!

키 창에 직접 보기를 추가하여 이 작업을 수행할 수 있습니다.

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)

iOS13 이상에 대한 업데이트

keyWindow사용되지 않습니다.다음을 사용해야 합니다.

UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.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)

Swift 3.1:

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

Dalef의 신속한 해결책:

self.navigationController?.view.addSubview(view)

사용자 보기를 Navigation Controller의 하위 보기로 추가합니다.

[self.navigationController.navigationBar addSubview: overlayView)]

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

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

이게 도움이 되길..:)

@사용자 정의 보기를 표시하려는 경우에는 Nam의 대답이 유용하지만 사용자 정의 보기에 사용자 상호 작용이 필요한 경우에는 에 대한 상호 작용을 사용하지 않도록 설정해야 합니다.

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

Nam의 대답에서 말한 것처럼 이러한 변화를 되돌리는 것을 잊지 마십시오.

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


You can do this in a better way with an extension:

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()

@Nicolas Bonne의 빠른 버전 답변:

    var popupWindow: UIWindow?

func showViewController(controller: UIViewController) {
    self.popupWindow = UIWindow(frame: UIScreen.mainScreen().bounds)
    controller.view.frame = self.popupWindow!.bounds
    self.popupWindow!.rootViewController = controller
    self.popupWindow!.makeKeyAndVisible()
}

func viewControllerDidRemove() {
    self.popupWindow?.removeFromSuperview()
    self.popupWindow = nil
}

원래 대답은 창의 즉시 할당 해제로 이어지므로 창은 강력한 속성이어야 합니다.

새 UI 창을 만드는 것이 좋습니다.

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
window.rootViewController = viewController;
window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
window.opaque = NO;
window.windowLevel = UIWindowLevelCFShareCircle;
window.backgroundColor = [UIColor clearColor];

[window makeKeyAndVisible];

그런 다음 다른 UIViewController에서 보기를 관리할 수 있습니다.창 제거하기

[window removeFromSuperview];
window = nil;

그게 도움이 되길 바랍니다!

두 가지 이상의 방법이 있습니다.

1 - 추가UIViewUIWindow그것을 추가하는 대신UIViewController이런 식으로 하면 모든 것 위에 있을 것입니다.

   [[(AppDelegate *)[UIApplication sharedApplication].delegate window] addSubview:view];

2 - 0.5알파로 뒤에 UIView 컨트롤러를 계속 표시하는 사용자 지정 전환 사용

이를 위해 다음을 참조할 것을 권장합니다. https://github.com/Citrrus/BlurryModalSegue

[[UIApplication sharedApplication].windows.lastObject addSubview:myView];

Swift 4.2 및 Xcode 10에서

var spinnerView: UIView? //This is your view

spinnerView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
//Based on your requirement change width and height like self.view.bounds.size.width
spinnerView?.backgroundColor = UIColor.black.withAlphaComponent(0.6)
//        self.view.addSubview(spinnerView)
let currentWindow: UIWindow? = UIApplication.shared.keyWindow
currentWindow?.addSubview(spinnerView!)

목표 C에서

UIView *spinnerView;//이것은 사용자의 보기입니다.

self.spinnerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.height)];  
//Based on your requirement change width and height like self.view.bounds.size.width
self.spinnerView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
// [self.view addSubview:self.spinnerView];
UIWindow *currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:self.spinnerView];

세로 또는 가로 모드로 작동할 수 있습니다.

또 다른 간단한 코드는 다음과 같습니다.

yourViewName.layer.zPosition = 1//Change your view name

전체 화면에서 보기를 추가하려면 아래 코드만 사용하십시오.

확장된 UIViewController 추가

public extension UIViewController {
   internal func makeViewAsFullScreen() {
      var viewFrame:CGRect = self.view.frame
      if viewFrame.origin.y > 0 || viewFrame.origin.x > 0 {
        self.view.frame = UIScreen.main.bounds
      }
   }
}

일반적인 하위 보기 추가 프로세스로 계속 진행

이제 UIViewController의 viewDidAppear를 추가하는 데 사용합니다.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

     self.makeViewAsFullScreen()
}

다른 보기 컨트롤러를 포함하는 "컨테이너 보기"가 포함된 UIViewController 하위 클래스를 사용합니다.그런 다음 Container View(컨테이너 보기) 내에 탐색 컨트롤러를 추가할 수 있습니다(예: 포함 관계 segue 사용).

컨테이너컨트롤러 구현 참조

UIApplication.shared.keyWindow?.insertSubview(yourView, at: 1)

이 방법은 xcode 9.4, iOS 11.4에서 작동합니다.

[self.navigationController.navigationBar.layer setZPosition:-0.1];
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 20, 35, 35)];
[view setBackgroundColor:[UIColor redColor]];
[self.navigationController.view addSubview:view];
[self.navigationController.view bringSubviewToFront:view];
self.navigationController.view.clipsToBounds = NO;
[self.navigationController.navigationBar.layer setZPosition:0.0];

여기에 이미지 설명 입력

UITextEffectsWindow 유형을 사용하여 첫 번째 창에 하위 보기를 추가해야 합니다.첫 번째로, 사용자 지정 키보드는 UITextEffects 창을 추가하기 때문에 하위 보기를 추가하면 제대로 작동하지 않습니다.또한 키보드도 창이므로 키보드 창에서 표시할 수 없기 때문에 마지막 창에 하위 보기를 추가할 수 없습니다.그래서 제가 찾은 가장 좋은 해결책은 UITextEffectsWindow 유형의 첫 번째 창에 하위 보기(또는 푸시 뷰 컨트롤러)를 추가하는 것입니다. 이 창은 액세서리 보기, navbar 등 모든 것을 다룹니다.

let myView = MyView()
myView.frame = UIScreen.main.bounds

guard let textEffectsWindow = NSClassFromString("UITextEffectsWindow") else { return }
let window = UIApplication.shared.windows.first { window in
    window.isKind(of: textEffectsWindow)
}
window?.rootViewController?.view.addSubview(myView)

언급URL : https://stackoverflow.com/questions/21850436/add-a-uiview-above-all-even-the-navigation-bar

반응형