এমনকি উপরে নেভিগেশন বারের উপরে একটি ইউআইভিউউও যুক্ত করুন


181

আমি অন্য যে কোনও মতামত, এমনকি নেভিগেশন বার, এক ধরণের "পপ-আপ" মতামত উপস্থাপন করতে চাই:

  • অন্য UIViewControllerনীচে অন্যটি দেখতে 0.5 স্ক্রিনের সাথে পূর্ণ পর্দার কালো পটভূমি ।
  • UIViewকিছু তথ্য সহ মাঝখানে একটি উইন্ডো, (আপনি যদি সবকিছু জানতে চান তবে একটি ক্যালেন্ডার)।

এটি করার জন্য, আমি একটি ইউআইভিউকন্ট্রোলার তৈরি করেছি যাতে দুটি UIViews(পটভূমি এবং উইন্ডো) রয়েছে এবং আমি এটি প্রদর্শনের চেষ্টা করছি। আমি একটি সাধারণ চেষ্টা করেছি [mySuperVC addSubview:myPopUpVC.view], তবে উপরে আমার নেভিগেশন বার রয়েছে।

আমি এটিকে মডেল হিসাবে উপস্থাপন করার চেষ্টা করেছি, তবে UIViewControllerনীচে অদৃশ্য হয়ে যায় এবং আমি আমার স্বচ্ছতার প্রভাব হারাতে পারি।

এটি করার জন্য কোনও ধারণা, আমি নিশ্চিত এটি বেশ সহজ ...

ধন্যবাদ!


আপনার অ্যাপ্লিকেশন উইন্ডোতে একটি সাবভিউ যুক্ত করুন। ওরিয়েন্টেশন পরিবর্তনগুলি পরিচালনা করা জটিল হতে পারে: স্ট্যাকওভারফ্লো.com
আমার

উত্তর:


197

কীউইন্ডোতে আপনার ভিউ সরাসরি যুক্ত করে আপনি এটি করতে পারেন:

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

আপডেট - উপরের সুইচ ৪.১ এবং এর জন্য

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

2
ধন্যবাদ :) দুর্ভাগ্যক্রমে আপনি ল্যান্ডস্কেপ মোডে থাকলে আপনাকে ভিউটি ঘোরানো দরকার। আমি নিশ্চিত না যে আমি কীভাবে এটি সঠিকভাবে করতে পারি know
নিকোলাস রায়

হ্যাঁ, আমি কেবল ল্যান্ডস্কেপ মোডে আছি এবং আমারভিউটি 90 ডিগ্রি রোটেশন সহ উপস্থিত হয়। তারা এখানে যা বলছে তা হ'ল বলে মনে হচ্ছে: স্ট্যাকওভারফ্লো.com
নিকোলাস রায়

ওরিয়েন্টেশন সমস্যাটি প্রাক আইওএস 8 ডিভাইসে ঘটে থাকে, যার জন্য এই সমাধানটি দুঃখের সাথে কাজ করে না।
thgc


4
এটি ট্যাব বারটি কভার করে না। এর জন্য কোন সমাধান?
মনীষা

134

[self.navigationController.view addSubview:overlayView]; আপনি কি সত্যিই চান


5
আপনাকে ফ্রেমটি সেট করতে হবে
গ্যাব্রিয়েল গনক্যাল্ভস

1
খুব ভাল সমাধান, বিশেষত, যখন আপনি "চাইল্ড ভিউ কন্ট্রোলার" হিসাবে একটি ভিউ যুক্ত করেন
রিচার্ড টপচি

2
এটি চাইল্ড ভিউ কন্ট্রোলারের দৃষ্টিভঙ্গির সাথে কাজ করে না। নেভিগেশন বারের জেড-লেভেল পরিবর্তন করা (যেমন নাম প্রস্তাবিত) চাইল্ড ভিউ কন্ট্রোলারগুলির সাথেও কাজ করে।
তাপানী

কী উইন্ডোতে ভিউ যুক্ত করার চেয়ে এটি আরও মার্জিত সমাধান হিসাবে দেখায়। এটি যেমন যুক্ত ভিউটি নিশ্চিত করে, বেস ভিউয়ের অ্যানিমেশন সহ সরানো হয়। কারণ কী উইন্ডোতে ভিউ যুক্ত করা থাকলে এটি অ্যানিমেশন সহ আসে না এবং আপনি যদি নিয়ামককে বরখাস্ত করতে চান তবে আলাদাভাবে সরিয়ে ফেলতে হবে।
সোয়ান সাইনি

এটি পপআপের ওপরে নয় তবে এটি আমার ক্ষেত্রে সঠিক right ধন্যবাদ))
দিলশোদ জোপিরভ

112

এখানে একটি সহজ মার্জিত সমাধান যা আমার জন্য কাজ করছে। আপনি নীচের নেভিগেশন বারের z অবস্থানটি সেট করতে পারেন:

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

কাজটি শেষ হয়ে গেলে 0 এ ফিরে সেট করতে ভুলবেন না।


1
এটি নেভিগেশন নিয়ন্ত্রকের দর্শন (যা উপায় দ্বারা ক্র্যাশ ঘটায়) এর সাবউভিউ হিসাবে ওভারলে ভিউ যুক্ত করার চেয়ে আরও ভাল কাজ করে। এই জেড-পজিশন সমাধানটি সম্ভবত অনেক বেশি নির্ভরযোগ্য এবং ভবিষ্যতে কম সমস্যার কারণ হতে পারে।
তাপানী

স্টোরিবোর্ডগুলির সাথে কাজ করার সময় এটি দুর্দান্ত কাজ করে। আপনি স্টোরিবোর্ডের ভিতরে ভিউ যুক্ত করতে পারেন!
জোস কোমেন

আমার জন্যও দুর্দান্ত কাজ করে। জেডপজিশনটি মান 0-এ সেট করা উচিত (আপনি কেবল উল্লেখ করেছেন যে এটি হয়ে গেলে এটি আবার সেট করা উচিত) mention এবং আমি কনসোল-এর ট্যাব (TabBarController থেকে আমার পর্দায় খুব আছে আমি zPosition সেট করার চেষ্টা করেছিলেন কিন্তু যখন 0 মান কনসোল-এর ট্যাব ফিরে এখনও দৃশ্যমান ছিল না তাই কনসোল-এর ট্যাব জন্য এটি isHidden সম্পত্তি ব্যবহার করতে
এলআইবিওআর Zapletal

1
অ্যাক্সেসযোগ্যতার সাথে কাজ করবেন না। ভিউ প্যানিং এটি ফোকাস করবে না।
অ্যান্টনজান

আমি তোমায় ভালোবাসি!! <3
chr0x

57

চেক করা প্রতিক্রিয়ার জন্য স্যুইফ্ট সংস্করণ:

সুইফট 4:

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

সুইফট ৩.১:

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

6
আমি কি এই কভারটি সমস্ত বর্তমান দর্শন (ভিউ কন্ট্রোলার) তৈরি করতে পারি, তবে এর উপরে প্রদর্শিত নতুন প্রদর্শিত দর্শনীয় নিয়ামকটি রেখে যেতে পারি?
মিশা জিওব্রো

24

আপনাকে নেভিগেশনকন্ট্রোলারের সাবউভিউ হিসাবে যুক্ত করুন।

[self.navigationController.navigationBar addSubview: overlayView)]

আপনি এটি উইন্ডোতে যুক্ত করতে পারেন:

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

আশাকরি এটা সাহায্য করবে.. :)


ওভার ভিউ আসছে তবে, যখন কোনও বোতাম যুক্ত করা যায় তখন বোতামটি ক্রিয়া করতে পারে না বা ওভারে কাস্টম লেবেল পাঠ্য সেট করতে পারে না
ভিউনিশ টিপি

আমার জন্য সূক্ষ্ম কাজ করে:let navigationBar = viewController.navigationController!.navigationBar navigationBar.addSubview(coverView)
আর্থার ক্লেমেন্স

22

দ্রুত ডালেফ দুর্দান্ত সমাধান:

self.navigationController?.view.addSubview(view)

11

@ নম এর উত্তর দুর্দান্ত কাজ করে যদি আপনি কেবল আপনার কাস্টম ভিউ প্রদর্শন করতে চান তবে যদি আপনার কাস্টম ভিউটিতে ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন হয় তবে এর জন্য ইন্টারঅ্যাকশন অক্ষম করতে হবেnavigationBar

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

নম এর উত্তরে যেমন বলা হয়েছে এই পরিবর্তনগুলি উল্টো করতে ভুলবেন না:

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

1
নিখুঁত সমাধান.. !! অনেক কিছু চেষ্টা করে অনেক সময় কাটিয়েছি .. তবে এটা ঠিক কাজ করে .. !!
দিশন্ত

8

@ নিকোলাস বোনেটের উত্তরের সুইফট সংস্করণ:

    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
}

ভুলে যাবেন না যে উইন্ডোটি অবশ্যই একটি শক্তিশালী সম্পত্তি হতে হবে, কারণ আসল উত্তরটি উইন্ডোটির তাত্ক্ষণিক অবনতির দিকে পরিচালিত করে


6

আমি আপনাকে নতুন 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];

তারপরে আপনি অন্য ইউআইভিউকন্ট্রোলারে আপনার দৃশ্য পরিচালনা করতে পারেন। উইন্ডোগুলি সরাতে:

[window removeFromSuperview];
window = nil;

আশা করি যে সাহায্য করবে!


3
ধন্যবাদ, তবে আমি মনে করি কিছু অনুপস্থিত কারণ কিছুই দেখা যাচ্ছে না: /
নিকোলাস রায়

6

এটি করার একাধিক উপায় রয়েছে:

1- এটি যুক্ত UIViewকরার UIWindowপরিবর্তে আপনার যুক্ত করুন UIViewController। এইভাবে এটি সবকিছুর শীর্ষে থাকবে।

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

2- কাস্টম ট্রানজিশনটি ব্যবহার করুন যা আপনার ইউআইভিউউকন্ট্রোলারটিকে 0.5 টি আলফা দিয়ে পিছনে প্রদর্শিত রাখবে

তার জন্য আমি আপনাকে এটি দেখার পরামর্শ দিচ্ছি: https://github.com/Citrrus/BlurryModalSegue



2

দ্রষ্টব্য আপনি যদি পূর্ণ স্ক্রীনে ভিউ যুক্ত করতে চান তবে কেবল নীচের কোডটি ব্যবহার করুন

এই যোগ এক্সটেনশন এর 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
      }
   }
}

সাবভিউয়ের স্বাভাবিক যোগ করার প্রক্রিয়া হিসাবে চালিয়ে যান

এখন ইউআইভিউকন্ট্রোলারের ভিউডিডঅ্যাপার যুক্ত করতে ব্যবহার করুন

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

     self.makeViewAsFullScreen()
}

2

সুইফটে 4.2 এবং এক্সকোড 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!)

ইন উদ্দেশ্য সি

ইউআইভিউ * স্পিনারভিউ; // এটি আপনার দর্শন

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 you view name

1

আমি এমন একটি ইউআইভিউকন্ট্রোলার সাবক্লাস ব্যবহার করব যাতে একটি "ধারক ভিউ" থাকে যা আপনার অন্যদের দেখার জন্য নিয়ন্ত্রককে এম্বেড করে। এরপরে আপনি কনটেইনার ভিউয়ের মধ্যে নেভিগেশন কন্ট্রোলার যুক্ত করতে সক্ষম হবেন (উদাহরণস্বরূপ এম্বেড রিলেশনশিপটি ব্যবহার করে)।

দেখুন একটি ধারক দেখুন কন্ট্রোলার বাস্তবায়নকারী


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

এই পদ্ধতিটি এক্সকোড 9.4, আইওএস 11.4 এর সাথে কাজ করে


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

এখানে চিত্র বর্ণনা লিখুন


0

ইউআইটিএফেক্সটএফেক্টস উইন্ডো টাইপের সাহায্যে আপনাকে প্রথম উইন্ডোতে একটি সংক্ষিপ্তসার যুক্ত করতে হবে। প্রথমত, কারণ কাস্টম কীবোর্ডগুলি তাদের ইউআইটিেক্সটএফেক্টস উইন্ডো যুক্ত করে এবং আপনি যদি এটিতে একটি সংক্ষিপ্তসার যুক্ত করেন তবে এটি সঠিকভাবে কাজ করবে না। এছাড়াও, আপনি শেষ উইন্ডোতে একটি সংক্ষিপ্তসার যোগ করতে পারবেন না কারণ উদাহরণস্বরূপ, কীবোর্ডটি একটি উইন্ডো এবং আপনি কীবোর্ড উইন্ডো থেকে উপস্থিত করতে পারবেন না। সুতরাং আমি যে সর্বোত্তম সমাধানটি পেয়েছি তা হ'ল ইউআইটিএফেক্টএফেক্টস উইন্ডো টাইপের সাথে প্রথম উইন্ডোতে সাবভিউ (বা এমনকি ভিউ কন্ট্রোলারকে পুশ করা), এই উইন্ডোটি আনুষঙ্গিক ভিউ, নাভবার - সব কিছুর অন্তর্ভুক্ত করে।

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.