নেভিগেশন বার শো / লুকান


158

আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যাতে নেভিগেশন বারে 2 বার বোতাম রয়েছে। যখন কোনও ব্যবহারকারী স্ক্রিনটি ডাবল করে তখন আমি এই নেভিগেশন বারটি আড়াল করে দেখাতে চাই।

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

আমি কীভাবে এটি কিছু করতে পারি? পরামর্শ সর্বদা প্রশংসা করা হয়।

উত্তর:


381

এটি এমন কিছু নয় যা কয়েকটি লাইনের কোডের সাথে মানিয়ে নিতে পারে তবে এটি এমন একটি পদ্ধতির যা আপনার পক্ষে কার্যকর হতে পারে।

নেভিগেশন বারটি গোপন করতে:

[[self navigationController] setNavigationBarHidden:YES animated:YES];

এটি দেখানোর জন্য:

[[self navigationController] setNavigationBarHidden:NO animated:YES];

এই পদ্ধতির জন্য ডকুমেন্টেশন এখানে উপলব্ধ

একটি "ডাবল ক্লিক" বা ডাবল-ট্যাপ, সাবক্লাস শোনার জন্য UIViewএবং সেই সাবক্লাসের একটি উদাহরণ তৈরি করুন আপনার দর্শন নিয়ন্ত্রকের viewসম্পত্তি।

উপশ্রেণীর দৃশ্যে, এর -touchesEnded:withEvent:পদ্ধতিটি ওভাররাইড করুন এবং টানা দুটি ট্যাপের মধ্যে সময়টি পরিমাপ করে সম্ভবত কোনও সময়কালে আপনি কতটি ছোঁয়া পান তা গণনা করুন CACurrentMediaTime()। বা ফলাফল থেকে পরীক্ষা [touch tapCount]

আপনি যদি দুটি ট্যাপ পান তবে আপনার সাবক্ল্যাসড ভিউ NSNotificationএমন একটি বিষয় জারি করে যা আপনার দেখার জন্য নিয়ন্ত্রক শোনার জন্য নিবন্ধভুক্ত করেছেন।

আপনার ভিউ কন্ট্রোলারটি বিজ্ঞপ্তিটি শোনার পরে, এটি এমন একটি নির্বাচককে বহিস্কার করে যা নেভিগেশন বারের বর্তমান দৃশ্যমান অবস্থার উপর ভিত্তি করে নেভিগেশন বারের isHiddenসম্পত্তি পড়ার মাধ্যমে অ্যাক্সেস করা নেভিগেশন বারের বর্তমান দৃশ্যমান অবস্থার উপর নির্ভর করে উল্লিখিত কোড ব্যবহার করে নেভিগেশন বারটি লুকিয়ে রাখে বা দেখায় ।

সম্পাদনা

ট্যাপ ইভেন্টগুলি পরিচালনা করার জন্য আমার উত্তরের অংশটি আইওএস 3.1 এর আগে সম্ভবত দরকারী useful UIGestureRecognizerবর্গ সম্ভবত ডাবল ট্যাপ, এই দিন পরিচালনা করার জন্য একটি ভাল পন্থা।

সম্পাদনা 2

নেভিগেশন বারটি লুকানোর সুইফট উপায়টি হ'ল:

navigationController?.setNavigationBarHidden(true, animated: true)

এটি দেখানোর জন্য:

navigationController?.setNavigationBarHidden(false, animated: true)

এটি যদি কোনও ফটো ভিউয়ার অ্যাপ্লিকেশনটির জন্য হয় তবে এনএভি বারটি লুকিয়ে রাখার ফলে চিত্রের দৃশ্যের জন্য একটি অপ্রীতিকর লাফ দেওয়া হয়, যা আমি কীভাবে প্রতিরোধ করতে পারি তা খুঁজে পাইনি। ৩.২ আপনাকে ডাবল টেপের জন্য ইউআইজিস্টারআরগনাইজার ব্যবহার করতে দেয়, এটি একটি আরও পরিষ্কার পদ্ধতির (কেবলমাত্র আইপ্যাডের জন্য এটিএম)।
পল লিঞ্চ

অনেক ধন্যবাদ অ্যালেক্স, আপনি আমাকে প্রচুর পরিমাণে ইনফিউমেশন সরবরাহ করেছেন, আমি আপনার নির্দেশিকাগুলি অনুসরণ করব ... ধন্যবাদ একটি টন
শিশির.ববি

এটি কি ট্যাব বারগুলির জন্য প্রয়োগ করা হয় ??? যদি আমি ট্যাব বারগুলি লুকিয়ে / প্রদর্শন করতে চান তবে আমি এইচভি করতে চাই?
শিশিরকে

1
এই 'লাফ' রোধ করার কোনও উপায় কি পল উল্লেখ করেছেন? আমার খুব একই সমস্যা আছে এবং আমি জানি না, এটি কী কারণে ঘটে .... এমনকি আমি মনে করি না, কেউ কখনও এটিকে হোঁচট খায়নি।
আইকি

'লাফানো' হওয়া থেকে বিরত রাখতে আপনাকে স্ক্রোলভিউয়ের সামগ্রী অন্তর্ভুক্ত সম্পত্তিটি পুনঃস্থাপন করতে হবে j অর্থাত। self.scrollView.contentInset = UIEdgeInsetsZero
crafterm

17

এই কোডটি আপনাকে সহায়তা করবে।

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
initWithTarget:self action:@selector(showHideNavbar:)];
[self.view addGestureRecognizer:tapGesture];

-(void) showHideNavbar:(id) sender 
{ 
// write code to show/hide nav bar here 
// check if the Navigation Bar is shown
if (self.navigationController.navigationBar.hidden == NO)
{
// hide the Navigation Bar
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
// if Navigation Bar is already hidden
else if (self.navigationController.navigationBar.hidden == YES)
{
// Show the Navigation Bar
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}

16

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

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


1
কন্টেন্টঅফসেট এবং কন্টেন্টসামান্য নোটের জন্য আপনাকে অনেক ধন্যবাদ। আপনি প্রকৃত নায়ক।
অলতেয়ালিস

আমি সম্মতি জানাই, আপনি আসল নায়ক, এখানে! অনেক ধন্যবাদ.
গায়তন

9

ইন সুইফট এই চেষ্টা,

navigationController?.isNavigationBarHidden = true  //Hide
navigationController?.isNavigationBarHidden = false //Show

অথবা

navigationController?.setNavigationBarHidden(true, animated: true) //Hide
navigationController?.setNavigationBarHidden(false, animated: true) //Show

7

নেভিগেশন বারটি গোপন করতে:

[self.navigationController setNavigationBarHidden:YES animated:YES];

নেভিগেশন বারটি দেখানোর জন্য:

[self.navigationController setNavigationBarHidden:NO animated:YES];

আইওএস 7-এ, অটো সম্পূর্ণরূপে সর্বাধিক ভোট প্রাপ্তদের বিপরীতে এই সমাধানটিকে প্রকট করে।
অ্যালেক্স জাভাটোন

7

এখানে একটি খুব দ্রুত এবং সহজ সমাধান:

self.navigationController.hidesBarsOnTap = YES;

এটি ডাবল ট্যাপের পরিবর্তে একক ট্যাপে কাজ করবে। এছাড়াও এটি বর্তমান ভিউ কন্ট্রোলারকে ধাক্কা দেওয়ার বা পপ করার পরেও নেভিগেশন নিয়ন্ত্রকের জন্য আচরণকে পরিবর্তন করবে।

আপনি এই আচরণটি সর্বদা আপনার নিয়ন্ত্রণকারীতে ভিউ অ্যাপ্লিকেশন: এবং ভিউইলডিস্পায়ার এর মধ্যে পরিবর্তন করতে পারেন: যদি আপনি কেবলমাত্র একক দর্শন নিয়ামকের জন্য আচরণটি সেট করতে চান তবে ক্রিয়াগুলি।

এখানে ডকুমেন্টেশন রয়েছে :


5

একটি উপায় অ্যাট্রিবিউট ইন্সপেক্টর-এ বারের দৃশ্যমানতা "শো নেভিগেশন বার" অনিচ্ছুক করেও হতে পারে someone এটি কারও সাহায্য করুন।

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


2

সুইফটে 4.2 এবং এক্সকোড 10 এ

self.navigationController?.isNavigationBarHidden = true  //Hide
self.navigationController?.isNavigationBarHidden = false  //Show

আপনি যদি ১ ম ভিসিতে নেভিগেশন বারটি প্রদর্শন করতে না চান তবে আপনি ২ য় ভিসির অনওয়ার্ডে প্রদর্শন করতে চান

আপনার 1 ম ভিসিতে এই কোডটি লিখুন।

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = true  //Hide
}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = false  //Show
}

2

আপনি যদি নেভিগেশন বারের স্থিতি সনাক্ত করতে চান তবে এটি লুকানো / দেখানো হয়েছে। সনাক্তকরণের জন্য আপনি কেবল নিম্নলিখিত কোডগুলি ব্যবহার করতে পারেন -

if self.navigationController?.isNavigationBarHidden{
    print("Show navigation bar")
} else {
    print("hide navigation bar")
}


-4

সুইফট কোড: এটি আইওএস 3.2 এবং তারপরে সম্পূর্ণরূপে কাজ করে।

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

    let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")let tapGesture = UITapGestureRecognizer(target: self, action: "hideNavBarOntap")
    tapGesture.delegate = self
    self.view.addGestureRecognizer(tapGesture)

তারপর লিখ

func hideNavBarOntap() {
    if(self.navigationController?.navigationBar.hidden == false) {
        self.navigationController?.setNavigationBarHidden(true, animated: true) // hide nav bar is not hidden
    } else if(self.navigationController?.navigationBar.hidden == true) {
        self.navigationController?.setNavigationBarHidden(false, animated: true) // show nav bar
    }
}

1
আমি বিশ্বাস করি এটি একটি দুর্বল সমাধান a এছাড়াও বুথিয়ান == সত্য পরীক্ষা করা নিরর্থক এবং অন্য প্রোগ্রামারদের এটি ভাল অনুশীলন বলে ভাবতে পরিচালিত করতে পারে। আপনি উটের মামলারও অপব্যবহার করছেন এবং আপনার উদাহরণে একটি শেষ বন্ধনী মিস করছেন। মাথায় রাখবেন যেহেতু সুইফ্ট ২.২ নির্বাচকগুলিও আপডেট করা হয়েছে। শেষ পর্যন্ত দ্রুতগতিটি কেবলমাত্র আইওএস 7 এবং তদূর্ধ্বের উপর সমর্থিত এবং অবশ্যই আইওএস 3.2 এ চলবে না
ডেভিড রেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.