[Ios] सभी के ऊपर एक UIView जोड़ें, यहां तक कि नेविगेशन बार भी


Answers

आप सीधे अपने दृश्य को कुंजीविंडो में जोड़कर ऐसा कर सकते हैं:

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

मैं किसी भी अन्य विचारों के ऊपर प्रदर्शित करना चाहता हूं, यहां तक ​​कि नेविगेशन बार, एक तरह का "पॉप-अप" दृश्य जो इस तरह दिखता है:

  • नीचे दिए गए अन्य UIViewController को देखने के लिए 0.5 अल्फा के साथ पूर्ण स्क्रीन काली पृष्ठभूमि।
  • कुछ जानकारी के साथ मध्य में एक UIView विंडो, (यदि आप सब कुछ जानना चाहते हैं तो कैलेंडर)।

ऐसा करने के लिए, मैंने एक UIViewController बनाया है जिसमें दो UIViews (पृष्ठभूमि और विंडो) शामिल हैं, और मैं इसे प्रदर्शित करने की कोशिश कर रहा हूं। मैंने एक सरल [mySuperVC addSubview:myPopUpVC.view] की कोशिश की है, लेकिन मेरे पास अभी भी नेविगेशन बार है।

मैंने इसे एक मॉडल के रूप में प्रस्तुत करने का प्रयास किया है, लेकिन नीचे UIViewController गायब हो जाता है, और मैं अपना पारदर्शिता प्रभाव खो देता हूं।

ऐसा करने के लिए कोई विचार, मुझे यकीन है कि यह काफी सरल है ...

धन्यवाद!




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



मैं आपको एक नया UIWindow बनाने की सलाह देता हूं:

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;

उम्मीद है कि मदद मिलेगी!




@ निकोलस बोनेट के उत्तर का स्विफ्ट संस्करण:

    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
}

यह मत भूलना कि खिड़की एक मजबूत संपत्ति होनी चाहिए, क्योंकि मूल जवाब खिड़की के तत्काल विलोपन की ओर जाता है




[self.navigationController.view addSubview:overlayView]; क्या आप वास्तव में चाहते हैं




नोट अगर आप पूर्ण स्क्रीन में दृश्य जोड़ना चाहते हैं तो केवल नीचे कोड का उपयोग करें

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 के दृश्य DidAppear जोड़ने में उपयोग करें

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

     self.makeViewAsFullScreen()
}



[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];




यहां एक साधारण सुरुचिपूर्ण समाधान है जो मेरे लिए काम कर रहा है। आप दृश्य के नीचे नेविगेशन बार की जेड स्थिति सेट कर सकते हैं:

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

बस इसे पूरा होने पर 0 पर सेट करना याद रखें।




मैं एक "कंटेनर व्यू" युक्त UIViewController उप-वर्ग का उपयोग करता हूं जो आपके अन्य नियंत्रकों को एम्बेड करता है। इसके बाद आप कंटेनर व्यू के अंदर नेविगेशन नियंत्रक को जोड़ सकते हैं (उदाहरण के लिए एम्बेड रिलेशनशिप सेग्यू का उपयोग करके)।

कंटेनर व्यू कंट्रोलर को कार्यान्वित करना देखें




ऐसा करने के एक से अधिक तरीके हैं:

1- UIViewController पर जोड़ने के बजाय UIWindow पर अपना UIView जोड़ें। इस तरह यह सब कुछ के शीर्ष पर होगा।

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

2- कस्टम संक्रमण का उपयोग करें जो आपके UIViewController को 0.5 अल्फा के साथ पीठ में दिखाए रखेगा

इसके लिए मैं आपको यह देखने की सलाह देता हूं: https://github.com/Citrrus/BlurryModalSegue




तेजी से डेलफ महान समाधान:

self.navigationController?.view.addSubview(view)



आपको नेविगेशन नियंत्रक के सबव्यू के रूप में देखें।

[self.navigationController.navigationBar addSubview: overlayView)]

आप इसे विंडो पर भी जोड़ सकते हैं:

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

उम्मीद है की यह मदद करेगा.. :)




चेक किए गए प्रतिक्रिया के लिए स्विफ्ट संस्करण:

स्विफ्ट 4:

let newView = UIView()
UIApplication.shared.keyWindow?.addSubview(newView)

स्विफ्ट 3.1:

let newView = UIView()
UIApplication.sharedApplication().keyWindow?.addSubview(newView)