আইওএস 7 স্ট্যাটাস বার আইওএস অ্যাপ্লিকেশন আইওএস 6 ডিফল্ট স্টাইল ফিরে?


292

আইওএস UIStatusBarIn-তে এমনভাবে নকশাকৃত করা হয়েছে যাতে এটি এর মত দৃশ্যের সাথে একীভূত হয়:

জিইউআই ডিজাইন করেছেন টিনা তাভার ( টিনা টাভার ডিজাইন করেছেন জিইউআই )

  • এটি দুর্দান্ত, তবে আপনার দৃশ্যের উপরের অংশে যখন আপনার কিছু থাকবে তখন এটি আপনার দৃষ্টিভঙ্গি কিছুটা গোলমাল করবে এবং এটি স্ট্যাটাস বারের সাথে ওভারল্যাপ হয়ে যায়।

  • এমন কোনও সহজ সমাধান রয়েছে (যেমন তথ্য.পালিস্টে কোনও সম্পত্তি সেট করা) যা এটির কাজটি বদলে দিতে পারে [ওভারল্যাপিং নয়] এটি আইওএস 6 এ কীভাবে ফিরে আসে?

  • আমি জানি যে আরও একদম সরল সমাধান হ'ল self.view.center.xপ্রতিটি একক দর্শন নিয়ামকের জন্য ২০ টি পয়েন্ট থাকা, তবে সেগুলি পরিবর্তন করা অন্যান্য মাত্রাগুলি স্ক্রু করে দেবে (ভিন্ন ভিন্ন self.view.center.xহওয়ার কারণে কাস্টম সেগগুলি ইত্যাদিতে সমস্যা দেখা দিতে পারে) এবং হঠাৎ করে এটি একটি ক্লান্তিকর চাকরিতে পরিণত হয় এড়ানো ভাল।

  • কেউ যদি আমাকে এর জন্য ওয়ান-লাইনার সমাধান সরবরাহ করতে পারে তবে আমি সত্যিই খুশি হব।

পিএস আমি জানি আমি থাকার মতো কাজ করে স্ট্যাটাস বারটি আড়াল করতে পারি

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

ইন didFinishLaunchingWithOptionsপদ্ধতি, কিন্তু যে, একটি কার্যসংক্রান্ত, একটি শর্টকাট সমস্যা এড়ানো তাই আমি যে একটি বাস্তব সমাধান বিবেচনা না।


6
দুঃখজনকভাবে কালো স্ট্যাটাস বারগুলি
আইওএস

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

আপনি কি ইউআইএসটিটাসবারডেফাল্টে স্ট্যাটাসবার্ট স্টাইল পছন্দ করার চেষ্টা করেছেন? আইওএস 7
ইউআইভিউ কনট্রোলার

1
রয়ে UIStatusBarDefaultস্ট্যাটাস বার শুধু রঙ এর বিষয়বস্তু কালো করে তোলে। এটি iOS6 এ কীভাবে এটি কার্যকরভাবে কাজ করে তা তৈরি করে না।
吖 奇 说 - 何魏奇 আর্চি তিনি

2
এর সাথে কোন ভাগ্য? আমি iOS7 পছন্দ করি তবে এই জিনিসটি আমাকে পাগল করে দিচ্ছে!
মিহাই ফ্রেতু

উত্তর:


449

এটি আমি লিখেছি এমন একটি ব্লগ পোস্ট থেকে ক্রস পোস্ট করা হয়েছে, তবে এখানে স্ট্যাটাস বার, নেভিগেশন বার এবং আইওএস 7 এ ধারক দর্শন নিয়ন্ত্রকদের পুরো রুনডাউন রয়েছে:

  1. আইওএস 6 স্টাইলের স্ট্যাটাস বারের বিন্যাস সংরক্ষণের কোনও উপায় নেই। স্ট্যাটাস বারটি সর্বদা আইওএস 7 এ আপনার অ্যাপ্লিকেশনটিকে ওভারল্যাপ করবে

  2. স্ট্যাটাস বারের বিন্যাস সহ স্ট্যাটাস বারের উপস্থিতি গুলিয়ে ফেলবেন না। অবস্থা (হালকা বা ডিফল্ট) স্ট্যাটাস বারটি কীভাবে ছড়িয়ে দেওয়া হয় (ফ্রেম / উচ্চতা / ওভারল্যাপ) প্রভাবিত করে না। পাশাপাশি এটি লক্ষ্য করাও গুরুত্বপূর্ণ যে সিস্টেমের স্ট্যাটাস বারের কোনও পটভূমির রঙ নেই। যখন এআইপিআইআইআইএসটিটাসবারস্টাইললাইট কনটেন্টকে বোঝায়, তাদের অর্থ পরিষ্কার পটভূমিতে সাদা পাঠ্য। UIStatusBarStyleDefault একটি পরিষ্কার ব্যাকগ্রাউন্ডে কালো পাঠ্য।

  3. স্থিতি দণ্ডের উপস্থিতি দুটি পারস্পরিক-একচেটিয়া ভিত্তিক পাথগুলির মধ্যে একটিতে নিয়ন্ত্রিত হয়: আপনি হয় সেগুলি প্রথাগত পদ্ধতিতে প্রোগ্রামগতভাবে সেট করতে পারেন, বা ইউআইকিউইটি ইউআইভিউকন্ট্রোলারের কিছু নতুন বৈশিষ্ট্যের ভিত্তিতে উপস্থিতি আপডেট করবে। পরবর্তী বিকল্পটি ডিফল্টরূপে চালু আছে। আপনি কোনটি ব্যবহার করছেন তা দেখতে "ভিউকন্ট্রোলার-ভিত্তিক স্ট্যাটাস বার উপস্থিতি" এর জন্য আপনার অ্যাপের প্লাস্ট মানটি পরীক্ষা করুন Check আপনি যদি এই মানটি হ্যাঁ সেট করে থাকেন তবে আপনার অ্যাপ্লিকেশনে প্রতিটি শীর্ষ স্তরের ভিউ কন্ট্রোলারকে (কোনও মানক UIKit ধারক ভিউ কন্ট্রোলার ব্যতীত) ডিফল্ট বা হালকা শৈলীতে ফিরে, পছন্দসই স্ট্যাটাসবার্ট স্টাইলকে ওভাররাইড করা দরকার। যদি আপনি প্লাস্ট মানটি NO তে সম্পাদনা করেন তবে আপনি পরিচিত ইউআইএপ্লিকেশন পদ্ধতি ব্যবহার করে স্ট্যাটাস বারের উপস্থিতি পরিচালনা করতে পারেন।

  4. ইউআইএনএভিগেশন কন্ট্রোলার তার ইউআইএনএভিগেশন বারের উচ্চতা 44 পয়েন্ট বা points৪ পয়েন্টে পরিবর্তিত করবে, বরং এক বিস্ময়কর এবং অনিচ্ছায়িত সীমাবদ্ধতার উপর নির্ভর করে। যদি ইউআইএনএভিগেশন কন্ট্রোলার সনাক্ত করে যে এর দৃশ্যের ফ্রেমের শীর্ষটি তার ইউআইওয়াইন্ডো শীর্ষের সাথে চাক্ষুষভাবে সুসংগত, তবে এটি points৪ পয়েন্টের উচ্চতা সহ তার নেভিগেশন বারটি আঁকবে। যদি এর দৃশ্যের শীর্ষস্থানটি UIWindow শীর্ষের সাথে সামঞ্জস্যপূর্ণ না হয় (এমনকি যদি কেবল একটি পয়েন্ট দ্বারা বন্ধ থাকে) তবে এটি 44 পয়েন্টের উচ্চতা সহ "ট্র্যাডিশনাল" উপায়ে তার নেভিগেশন বারটি আঁকবে। এই যুক্তিটি ইউআইএনএভিগেশন কন্ট্রোলার দ্বারা সম্পাদিত হয় এমনকি যদি এটি আপনার অ্যাপ্লিকেশনটির ভিউ কন্ট্রোলার শ্রেণিবিন্যাসের ভিতরে বেশ কয়েকটি শিশু থাকে। এই আচরণটি রোধ করার কোনও উপায় নেই।

  5. আপনি যদি কাস্টম নেভিগেশন বারের ব্যাকগ্রাউন্ড চিত্র সরবরাহ করেন যা কেবল ৪৪ পয়েন্ট (৮৮ পিক্সেল) লম্বা এবং ইউআইএনএভিগেশন কন্ট্রোলারের দর্শনগুলি ইউআইওয়াইন্ডোর সীমানার সাথে মেলে (# 4 তে আলোচনা করা হয়েছে), ইউআইএনএভিগেশন কন্ট্রোলার আপনার চিত্রটি ফ্রেমে আঁকবে (0,20,320 , 44), আপনার কাস্টম চিত্রের উপরে অস্বচ্ছ কালো স্থানের 20 পয়েন্ট রেখে। এটি আপনাকে ভেবে বিভ্রান্ত করতে পারে আপনি একজন চতুর বিকাশকারী যিনি নিয়ম # 1 বাদ দিয়েছিলেন, তবে আপনি ভুল হয়ে গেছেন। নেভিগেশন বারটি এখনও points৪ পয়েন্ট লম্বা। একটি স্লাইড-থেকে-প্রকাশিত শৈলীর ভিউ হায়ারার্কিতে একটি ইউআইএনএভিগেশন কন্ট্রোলার এম্বেড করা এটিকে প্রচুর পরিমাণে পরিষ্কার করে দেয়।

  6. ইউআইভিউউকন্ট্রোলারের বিভ্রান্তিকরভাবে নামযুক্ত এজগুলি forExededLayout সম্পত্তি থেকে সাবধান থাকুন। প্রান্তরেডস লেডআউট সামঞ্জস্য করা বেশিরভাগ ক্ষেত্রে কিছুই করে না। ইউআইকিট এই সম্পত্তিটি ব্যবহার করার একমাত্র উপায় হ'ল যদি আপনি কোনও ইউআইএনএভিগেশন কন্ট্রোলারটিতে একটি ভিউ কন্ট্রোলার যুক্ত করেন, তবে ইউআইএনএভিগেশন কন্ট্রোলার নেভিগেশন বার / স্থিতি বারের অঞ্চলের নীচে এর চাইল্ড ভিউ কন্ট্রোলারটি দৃশ্যমান হওয়া উচিত কিনা তা নির্ধারণ করতে প্রান্তগুলি forExtendedLayout ব্যবহার করে। ইউআইএনএভিগেশন কন্ট্রোলার এ এজেনডেড লেআউট প্রান্ত সেট করা নিজেই ইউআইএনএভিগেশন কন্ট্রোলারের একটি 44 বা 64 পয়েন্ট উঁচু নেভিগেশন বার অঞ্চল আছে কিনা তা পরিবর্তন করতে কিছুই করে না। সেই যুক্তিটির জন্য # 4 দেখুন। একটি সরঞ্জামদণ্ড বা ইউআইটিববারকন্ট্রোলার ব্যবহার করার সময় অনুরূপ বিন্যাস যুক্তি আপনার ভিউয়ের নীচে প্রযোজ্য।

  7. যদি আপনি যা করতে চেষ্টা করছেন সমস্তই যদি কোনও ইউআইএনএভিগেশন কন্ট্রোলারের অভ্যন্তরে আপনার কাস্টম চাইল্ড ভিউ কন্ট্রোলারটিকে নেভিগেশন বারের আন্ডারল্যাপিং করা থেকে বিরত রাখে, তবে ইউআইআরেক্টএডজোননে (বা কমপক্ষে ইউআইআরেক্টএজটপ বাদ দেয় এমন একটি মাস্ক) প্রান্তগুলি সেট করুন। আপনার দেখার নিয়ামকের জীবনচক্রের যত তাড়াতাড়ি সম্ভব এই মানটি সেট করুন।

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

  9. পুনরাবৃত্তি করার জন্য: আইওএস 6 স্টাইলের স্ট্যাটাস বারের বিন্যাস যুক্তিতে ফিরে আসার কোনও উপায় নেই। এটি অনুমান করার জন্য, আপনাকে পুরানো উপস্থিতি অনুকরণ করতে স্ট্যাটাস বারের পিছনে ইচ্ছাকৃতভাবে কালো দৃষ্টি রেখে, আপনার অ্যাপ্লিকেশনটির সমস্ত ভিউ কন্ট্রোলারকে স্ক্রিনের উপরের দিক থেকে 20 পয়েন্টে অফসেট করে একটি ধারক দৃশ্যে স্থানান্তরিত করতে হবে। রিপোস্টে এবং হুইস্পারে আমরা এই পদ্ধতিটি ব্যবহার করে শেষ করেছি।

  10. অ্যাপল আপনাকে # 9 করার চেষ্টা করবেন না তা নিশ্চিত করতে খুব চাপ দিচ্ছে। তারা চান যে আমরা আমাদের সমস্ত অ্যাপ্লিকেশনগুলি স্ট্যাটাস বারের আন্ডারল্যাপ করতে পুনরায় ডিজাইন করব। তবে অনেকগুলি যুক্তিযুক্ত যুক্তি রয়েছে, তবে ব্যবহারকারীর অভিজ্ঞতা এবং প্রযুক্তিগত কারণে উভয় ক্ষেত্রেই কেন এটি সর্বদা ভাল ধারণা নয়। আপনার ব্যবহারকারীদের পক্ষে সবচেয়ে ভাল যা করা উচিত তা করা উচিত এবং কেবল প্ল্যাটফর্মের স্বাদ অনুসরণ না করে।


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

4
এটি একটি উজ্জ্বল সমাধান। আপনি অটোলআউটটিতে আমার অজ্ঞতা প্রকাশ করেছেন। ভাল যে পেতে।
jaredsinclair

1
আপনি যদি শীর্ষস্থানীয় বিন্যাস গাইডের প্রান্তের নীচে আপনার অবজেক্টের শীর্ষ স্থানটি রাখেন তবে আপনি সীমাবদ্ধতা নিয়ন্ত্রণটি নিকটতম প্রতিবেশীর সাথে একটি উল্লম্ব ব্যবধান সীমাবদ্ধ করতে ব্যবহার করতে পারেন, যা এখন শীর্ষস্থানীয় বিন্যাস গাইড হবে। বিকল্পভাবে আপনি স্পষ্টভাবে একটি উল্লম্ব ব্যবধান সীমাবদ্ধ করতে আপনার অবজেক্ট থেকে উপরের লেআউট গাইডটিতে সিটিআরএল + ক্লিক ব্যবহার করতে পারেন।
BreadicalMD

2
@ ব্র্যাডিকালএমডি একটি অংশ যা আমি বুঝতে পারি না তা হল- ট্যাপলয়েটগুইড আইওএস 6 এ উপলব্ধ নয়, তার মানে কি আপনাকে আইওএস 7 এবং 6 এ বিভিন্ন অটো লেআউট সীমাবদ্ধতা ব্যবহার করা দরকার?
জেরেমি

1
দুর্দান্ত উত্তর ... তবে আমার একটি সন্দেহ আছে 1) ইউআইএনএভিগেশন কন্ট্রোলার উচ্চতার অংশটি পরিবর্তন করছে lease দয়া করে এটিকে আরও ব্যাখ্যা করুন। ধন্যবাদ
ব্যবহারকারী 1010819

122

19 শে সেপ্টেম্বর 2013 এ আপডেট:

যোগ করে নির্দিষ্ট স্কেলিং বাগগুলি self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);

NSNotificationCenterবিবৃতিতে সংশোধন করা টাইপস


12 সেপ্টেম্বর 2013 এ আপডেট:

সংশোধন করা UIViewControllerBasedStatusBarAppearanceহয়েছেNO

স্ক্রিন রোটেশন সহ অ্যাপ্লিকেশনগুলির জন্য একটি সমাধান যুক্ত করেছে

স্ট্যাটাস বারের পটভূমির রঙ পরিবর্তন করতে একটি দৃষ্টিভঙ্গি যুক্ত করেছে।


স্পষ্টতই, iOS7 স্থিতি দণ্ডটি iOS6 এ কীভাবে কাজ করে তা ফিরিয়ে আনার কোনও উপায় নেই।

তবে আমরা সর্বদা কিছু কোড লিখতে পারি এবং স্ট্যাটাস বারটি আইওএস 6-এর মতো করে দিতে পারি, এবং এটিই আমি নিয়ে আসা সবচেয়ে স্বল্পতম উপায়:

  1. সেট UIViewControllerBasedStatusBarAppearanceথেকে NOinfo.plist(দেখুন কন্ট্রোলার আমরা UIApplicationstatusBarStyle পদ্ধতি ব্যবহার করে স্ট্যাটাস বার শৈলী সেট করতে পারেন যাতে স্ট্যাটাস বার শৈলী সমন্বয় থাকার অনির্বাচন করতে।)

  2. অ্যাপডেলিগেটে application:didFinishLaunchingWithOptionsকল করুন

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
        [application setStatusBarStyle:UIStatusBarStyleLightContent];
        self.window.clipsToBounds =YES;
        self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
    
        //Added on 19th Sep 2013
        self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
    }
    return YES;
    


যাতে:

  1. এটি আইওএস 7 কিনা তা পরীক্ষা করে দেখুন।

  2. UIStatusBarStyleDefault এর বিপরীতে স্ট্যাটাস বারের সামগ্রীটি সাদা হতে সেট করুন।

  3. এমন দৃষ্টিভঙ্গি এড়িয়ে চলুন যার ফ্রেমগুলি দৃশ্যমান সীমা ছাড়িয়ে প্রসারিত হতে পারে (উপরে থেকে মূল দৃশ্যে অ্যানিমেট করা দর্শনগুলির জন্য)।

  4. অ্যাপ্লিকেশনটির উইন্ডো ফ্রেম স্থানান্তরিত ও আকার পরিবর্তন করে স্থিতি দণ্ডটি আইওএস 6 এ কেমন হয় তার মতো স্থান গ্রহণ করে এমন মায়া তৈরি করুন।


স্ক্রিন রোটেশন সহ অ্যাপ্লিকেশনগুলির জন্য,

যোগ করে ওরিয়েন্টেশন পরিবর্তনগুলি সনাক্ত করতে এনএসএনটিফিকেশন সেন্টার ব্যবহার করুন

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];

মধ্যে if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)এবং AppDelegate একটি নতুন পদ্ধতি তৈরি করুন:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
    int a = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue];
    int w = [[UIScreen mainScreen] bounds].size.width;
    int h = [[UIScreen mainScreen] bounds].size.height;
    switch(a){
        case 4:
            self.window.frame =  CGRectMake(0,20,w,h);
            break;
        case 3:
            self.window.frame =  CGRectMake(-20,0,w-20,h+20);
            break;
        case 2:
            self.window.frame =  CGRectMake(0,-20,w,h);
            break;
        case 1:
           self.window.frame =  CGRectMake(20,0,w-20,h+20);
    }
}

যাতে স্থিতিবিন্যাস পরিবর্তন হওয়ার সাথে সাথে এটি অ্যাপের স্ক্রিন ওরিয়েন্টেশন (প্রতিকৃতি, উপরিভাগ ডাউন, ল্যান্ডস্কেপ বাম, বা ল্যান্ডস্কেপ রাইট) সনাক্ত করতে এবং আইওএস 6 স্ট্যাটাস বারের ইলিউশন তৈরি করতে যথাক্রমে অ্যাপের উইন্ডো ফ্রেম পরিবর্তন করে।


আপনার স্ট্যাটাস বারের পটভূমির রঙ পরিবর্তন করতে:

যোগ

 @property (retain, nonatomic) UIWindow *background;

মধ্যে AppDelegate.hকরতে backgroundআপনার বর্গ একটি সম্পত্তি এবং এটা deallocating থেকে এআরসি প্রতিরোধ। (আপনি যদি আরসি ব্যবহার না করেন তবে আপনাকে এটি করতে হবে না))

এর পরে আপনার কেবলমাত্র ইউআই উইন্ডো তৈরি করতে হবে if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1):

background = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, self.window.frame.size.width, 20)];
background.backgroundColor =[UIColor redColor];
[background setHidden:NO];

@synthesize background;পরে ভুলবেন না @implementation AppDelegate!


3
এটি ঘূর্ণায়মান বিরতি। সবেমাত্র একটি মাথা উপরে
জেসি নওহর

2
@ জেসনৌহর আমি 0 থেকে 20 পর্যন্ত প্রোগ্রামালিকভাবে ভার্টিকাল স্পেসিং সীমাবদ্ধতা পরিবর্তন করার পরামর্শ দিচ্ছি। এটি রোটেশন উপর কাজ করবে।
বিশেষজ্ঞ

2
নেভিগেশন বারটি 20 পিক্সেলের দ্বারা প্রসারিত হওয়া আমরা কীভাবে এড়াতে পারি তার কোনও ধারণা? এই সমাধানটি আমার পক্ষে ঠিক আছে তবে আমার নেভিগেশন বারটি 20 পিক্সেল খুব বেশি।
সাইমন্বস

4
@ আরচিহোল্ট: আমি যখন কোনও মডেল ভিউ কন্ট্রোলার উপস্থাপন করি তবে আপনার সহজ সমাধানটি আমার পক্ষে কাজ করে। মডেল ভিউ কন্ট্রোলার একবার বরখাস্ত হয়ে গেলে, অবশিষ্ট দৃশ্য এখন স্ট্যাটাস বারের অধীনে। মজাদার আর কিছু চলছে না তা নিশ্চিত করার জন্য আমি এটি একটি তাজা নমুনা প্রকল্পে পুনরুত্পাদন করেছি। আমি ভাবছি সম্ভবত আপনার আরও উন্নত সমাধান এখানে কার্যকর হতে পারে তবে কোন বিজ্ঞপ্তি কার্যকর হবে তা নিশ্চিত নয় not কোন ধারনা?
মার্কডোরিসন

4
মডেল ভিউ কন্ট্রোলারকে বরখাস্ত করার পরে দর্শন পুনরায় সেট করা হয়। :(
কারেনআনে

41

আপডেট (নতুন সমাধান)

এই আপডেটটি হ'ল আইওএস 7 নেভিগেশন বার সমস্যার সর্বোত্তম সমাধান You আপনি নেভিগেশন বারের রঙের উদাহরণ সেট করতে পারেন: ফেকনাভবার.ব্যাকগ্রাউন্ড কালার = [ইউআইকিওলোর রেড কালার];

দ্রষ্টব্য: আপনি যদি ডিফল্ট নেভিগেশন কন্ট্রোলার ব্যবহার করেন তবে দয়া করে পুরানো সমাধানটি ব্যবহার করুন।

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    if(NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0)
    {
        UIView *FakeNavBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
        FakeNavBar.backgroundColor = [UIColor whiteColor];

        float navBarHeight = 20.0;
        for (UIView *subView in self.window.subviews) {

            if ([subView isKindOfClass:[UIScrollView class]]) {
                subView.frame = CGRectMake(subView.frame.origin.x, subView.frame.origin.y + navBarHeight, subView.frame.size.width, subView.frame.size.height - navBarHeight);
            } else {
                subView.frame = CGRectMake(subView.frame.origin.x, subView.frame.origin.y + navBarHeight, subView.frame.size.width, subView.frame.size.height);
            }
        }
        [self.window addSubview:FakeNavBar];
    }

    return YES;

}

পুরানো সমাধান - যদি আপনি পূর্ববর্তী কোড ব্যবহার করেন তবে দয়া করে নিম্নলিখিত কোড এবং চিত্র উপেক্ষা করুন

এটি আইওএস 7 নেভিগেশন বার সমাধানের পুরানো সংস্করণ।

আমি নিম্নলিখিত কোডটি দিয়ে সমস্যার সমাধান করেছি। এটি একটি স্ট্যাটাস বার যুক্ত করার জন্য। didFinishLaunchingWithOptions

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
    UIView *addStatusBar = [[UIView alloc] init];
    addStatusBar.frame = CGRectMake(0, 0, 320, 20);
    addStatusBar.backgroundColor = [UIColor colorWithRed:0.973 green:0.973 blue:0.973 alpha:1]; //change this to match your navigation bar
    [self.window.rootViewController.view addSubview:addStatusBar];
}

এবং ইন্টারফেস বিল্ডারের ক্ষেত্রে এটি যখন আপনি আইওএস 6 দিয়ে খুলেন; এটি 0 পিক্সেল থেকে শুরু হয়।

দ্রষ্টব্য: আইওএস 6/7 ডেল্টাস কেবল তখনই উপস্থিত হয় যখন আপনি বিশদ ফলকে "ফাইল ইন্সপেক্টর" (বাম-সর্বাধিক আইকন) -তে ভিউ কন্ট্রোলারের জন্য "অটোলেআউট ব্যবহার করুন" টি চেক করেন।

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


6
আপনি আমার দিনটি তৈরি করেছেন the সাহায্যের জন্য +1 নিন!
নিরু মুকুন্দ শাহ

5
দয়া করে নোট করুন: আইওএস 6/7 ডেল্টাস কেবল তখনই উপস্থিত হয় যখন আপনি বিশদ ফলকে "ফাইল ইন্সপেক্টর" (বাম-সর্বাধিক আইকন) এর মধ্যে নিয়ন্ত্রণ কন্ট্রোলারের জন্য "অটোলেআউট ব্যবহার করুন" টি চেক করেন।
ম্যাট

1
অনেক ধন্যবাদ! তুমি আমাকে অনেক কষ্ট বাঁচিয়েছ!
নিউউইনস্টন

2
কে বলেছে যে আইওএস 6 স্টাইলের স্ট্যাটাস বারের বিন্যাসটি বজায় রাখা যায় না, আপনি এটি @ ট্যাসেটিনজব্লিক পদ্ধতিতে করতে পারেন ... এই অ্যাউসুম সমাধানের জন্য ধন্যবাদ সাথী।
ভিজলেক্স

1
সুন্দর! এছাড়াও, কেবল আপেল এটিকে পছন্দ করে নিন তা নোট করুন: যদি (এনএসফাউন্ডেশনভেরিশন নাম্বার = = এনএসফাউন্ডেশন ভার্সন নাম্বার_আইওএস_6_1) {}
জোয়েল

26

সমাধান:

পদ্ধতিটি ওভাররাইড করে এটিকে আপনার ভিউকন্ট্রোলার বা রুটভিউ কনট্রোলারে সেট করুন:

-(BOOL) prefersStatusBarHidden
    {
        return YES;
    }

কোনও খারাপ সমাধান নয়। সম্পূর্ণরূপে বারটি সরান। ইউএক্সের জন্য সর্বদা আদর্শ না হলেও কার্যক্ষম।
ফারহান হাফিজ

সাধারনভাবে সুন্দর. নির্দোষভাবে আমার জন্য কাজ করেছেন।
পাগলোকেশ

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

আমি এই পদ্ধতিটি ব্যবহার করে কেবল সফল
হয়েছি

17

স্টোরিবোর্ডের ব্যাপক ব্যবহার করে এমন প্রকল্পগুলির জন্য এখানে অন্য পদ্ধতির:

লক্ষ্য:

এই পদ্ধতির লক্ষ্য হ'ল আইওএস in-তে একই স্ট্যাটাস বার স্টাইলটি পুনরায় তৈরি করা (আইওএস Status স্ট্যাটাস বার আইওএস style স্টাইলে ফিরে আসা? "প্রশ্নের শিরোনাম দেখুন)।

সারসংক্ষেপ:

এটি অর্জনের জন্য আমরা স্টিওবোর্ডটি যতটা সম্ভব ইউআই উপাদানগুলিকে স্ট্যাটাস বার দ্বারা (আইওএস under এর অধীনে) নীচে ওপারে সরিয়ে নিয়ে যেতে পারি, যদিও ডেল্টাস ব্যবহার করে আইওএস .1.১ বা তার আগেরটির জন্য নিম্নমুখী বিন্যাস পরিবর্তনটি ফিরিয়ে আনতে পারি। আইওএস 7 এর ফলে অতিরিক্ত অতিরিক্ত স্থানটি একটি ইউআইভিউ দখল করে ব্যাকগ্রাউন্ড কালার আমাদের চয়ন করার রঙে সেট করে। পরেরটি কোড বা স্টোরিবোর্ড ব্যবহার করে তৈরি করা যেতে পারে (নীচের বিকল্পগুলি দেখুন)

অনুমানের:

নীচের পদক্ষেপগুলি অনুসরণ করার সময় কাঙ্ক্ষিত ফলাফল পেতে, ধরে নেওয়া হয় যে কোনওটি View controller-based status bar appearanceসেট করা নেই এবং আপনার Status bar styleহয় "স্বচ্ছ কালো শৈলী (০.০ এর আলফা)" বা "অস্বচ্ছ কালো শৈলী" এ সেট করা আছে is উভয় সেটিংস আপনার প্রকল্পের সেটিংসে "তথ্য" এর আওতায় পাওয়া যাবে বা যুক্ত করা যেতে পারে।

ধাপ:

  • আপনার স্ট্যাটাস বারের পটভূমি হিসাবে পরিবেশন করতে UIWindow এ একটি সংক্ষিপ্তসার যুক্ত করুন। এটি অর্জন করতে, আপনার অ্যাপডেলিগেটের application: didFinishLaunchingWithOptions:পরে নিম্নলিখিতটি যুক্ত করুনmakeKeyAndVisible

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
        UIView *statusBarBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, yourAppsUIWindow.frame.size.width, 20)];
        statusBarBackgroundView.backgroundColor = [UIColor blackColor];
        [yourAppsUIWindow addSubview:statusBarBackgroundView];
    }
    
  • যেহেতু আপনি কেবলমাত্র iOS 7 এর জন্য ব্যাকগ্রাউন্ডটি প্রোগ্রামযুক্তভাবে যুক্ত করেছেন তাই আপনাকে আপনার ইউআই উপাদানগুলির লেআউটটি সামঞ্জস্য করতে হবে যা স্ট্যাটাস বারের সাহায্যে ওভারল্যাপযুক্ত আইওএস 6 এর লেআউট সংরক্ষণ করে। এটি অর্জনের জন্য, নিম্নলিখিতগুলি করুন:

    • Use Autolayoutআপনার স্টোরিবোর্ডের জন্য যাচাই করা আছে তা নিশ্চিত করুন (এটি কারণ অন্যথায় "আইওএস 6/7 ডেল্টাস" আকার পরিদর্শকটিতে প্রদর্শিত হয় না)। এটা করতে:
      • আপনার স্টোরিবোর্ড ফাইলটি নির্বাচন করুন
      • ইউটিলিটিগুলি প্রদর্শন করুন
      • "ফাইল পরিদর্শক দেখান" নির্বাচন করুন
      • "ইন্টারফেস বিল্ডার ডকুমেন্ট" এর অধীনে "অটোলেআউট ব্যবহার করুন" আনচেক করুন
    • Ptionচ্ছিকভাবে, আইওএস 7 এবং 6 উভয়ের জন্য লেআউট পরিবর্তনের উপর নজর রাখার জন্য আপনি সেগুলি প্রয়োগ করার জন্য, "সহকারী সম্পাদক" নির্বাচন করুন, "প্রাকদর্শন" এবং "আইওএস 6.1 বা তার আগের" নির্বাচন করুন: এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন
    • এখন আপনি যে UI উপাদানটি সামঞ্জস্য করতে চান তা নির্বাচন করুন যাতে এটি আর স্ট্যাটাস বার দ্বারা ওভারল্যাপ না হয়
    • ইউটিলিটিস কলামে "আকার পরিদর্শক দেখান" নির্বাচন করুন
    • আপনার ইউআই উপাদানটি Y-অক্ষ বরাবর স্ট্যাটাসবার বিজি উচ্চতার সমান পরিমাণে প্রতিস্থাপন করুন: এখানে চিত্র বর্ণনা লিখুন
    • এবং স্ট্যাটাসবারের বিজি উচ্চতার সমান নেজিটিভ পরিমাণ দ্বারা ওয়াইয়ের জন্য আইওএস 6/7 ডেল্টাস মানটি পরিবর্তন করুন (আপনি যদি এটি ব্যবহার করছেন তবে আইওএস 6 পূর্বরূপের পরিবর্তনটি নোট করুন): এখানে চিত্র বর্ণনা লিখুন

বিকল্প:

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

এই বিকল্পটির নেতিবাচক দিক (যদিও অটোরেটেটের সামঞ্জস্যতা বিবেচনা করার তুলনায় তুচ্ছ হতে পারে) এটি হ'ল আপনি যদি আইওএস 6 এর জন্য আপনার স্টোরিবোর্ডটি দেখছেন তবে এই অতিরিক্ত দৃশ্যটি তাত্ক্ষণিকভাবে দৃশ্যমান হবে না আপনি কেবলমাত্র জানতেন যে আপনার যদি সেখানে একবার তাকান তবে " স্টোরিবোর্ডের ডকুমেন্ট আউটলাইন "।


12

আপনি আপনার ভিউ কন্ট্রোলার স্ট্যাটাস বার (এবং ন্যাভিগেশন বার) দ্বারা overlapped করতে না চান, আনচেক "প্রান্ত বাড়ান উপরের পাট্টা অধীনে" বক্স ইন্টারফেস বিল্ডার মধ্যে Xcode 5।

শীর্ষ বারগুলির অধীনে প্রসারিত প্রান্তগুলি অনিচ্ছুক করুন


7
এটি কেবলমাত্র যদি আপনি স্টোরিবোর্ড ব্যবহার করেন
Cœur

3
এটি কেবল পাত্রে vcs যেমন ন্যাভিগেশন কন্ট্রোলার বা ট্যাববার নিয়ামক হিসাবে কাজ করে
Andrea

2
এজফোরএক্সটেন্ডেড লেআউটটি কেবলমাত্র ধারক দর্শন নিয়ন্ত্রণকারীরা (ইউআইএনএভিগেশন কন্ট্রোলারের মতো) ব্যবহার করে বাচ্চাদের মতামত পিতামাতার ক্রোম দ্বারা আচ্ছাদিত করা উচিত কিনা তা নির্ধারণ করতে। UIWindow এর জন্য রুট ভিউ নিয়ন্ত্রকের উপর এই সম্পত্তিটি সেট করা কিছুই করে না। : উপরে আমার উত্তর দেখুন stackoverflow.com/questions/18294872/...
jaredsinclair

আপনি কীভাবে কোনও ইউআইটিববারকন্ট্রোলার @ আন্দ্রেয়ার জন্য এটি করেন? ধন্যবাদ।
কারেনআনে

@ কারেনআ্নে নির্ভর করুন যদি আপনি প্রোগ্রামগত বা স্টোরিবোর্ডগুলি করেন। প্রোগ্রামিয়ালি আপনার কেবলমাত্র ইউআইটিববারভিউকন্ট্রোলারের ভিতরে যে ভিউ কন্ট্রোলারটি প্রদর্শিত হচ্ছে তার জন্য প্রান্তের জন্য প্রচ্ছদ সম্পত্তি সেট করতে হবে, তবে স্ট্যাটাস বারের সমস্যা না থাকলে আপনাকে অবশ্যই ইউআইটিব্যাবারকন্ট্রোলারের ভিতরে একটি ইউএনএভিগেশন কন্ট্রোলার লোড করতে হবে। এখানে চেক করুন। developer.apple.com/library/ios/documentation/UserExperience/...
অ্যান্ড্রিয়া

11

5
অ্যাপল ধরে নিচ্ছে সবাই অটো-লেআউট ব্যবহার করছে। এক্সকোড 4-এ অটো-লেআউটটি ভয়ঙ্কর ছিল এবং এক্সকোড 5 সবেমাত্র প্রকাশিত হয়েছিল, সুতরাং এটি একটি সন্দেহজনক ধারণা।
গ্লেন মেইনার্ড 21

1
তবে সম্ভাবনায় এটি আরও ভাল সমাধান তবে রুট উইন্ডো বা স্ট্যাটাস বারের ফ্রেমটির আকার পরিবর্তন করুন।
ইগোর

আমি যতদূর বলতে পারি, আপনার রুটভিউ কনট্রোলার যদি একটি স্প্লিটভিউকন্ট্রোলার হয় তবে অ্যাপলের সমাধান কাজ করে না।
ভার্ন জেনসেন

8

এই ডার্ন সমস্যাটি সমাধান করতে আমি অনেকগুলি অনেকগুলি এবং অনেক টিউটোরিয়াল দেখেছি। কিন্তু তাদের কেউ কাজ করে না! এখানে আমার সমাধান, এবং এটি আমার জন্য কার্যকর:

if( [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f ) {
    float statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
    for( UIView *v in [self.view subviews] ) {
        CGRect rect = v.frame;
        rect.origin.y += statusBarHeight;
        v.frame = rect;
    }
}

যুক্তিটি সহজ। আমি সমস্ত শিশুদের দৃষ্টিভঙ্গি 20 পিক্সেল সহ সেল্ফ ভিউতে স্থানান্তরিত করেছি। এখানেই শেষ. তারপরে, স্ক্রিনশটটি আইওএস 6 এর মতো প্রদর্শিত হবে। আমি আইওএস 7 স্ট্যাটাস বারকে ঘৃণা করি! ~ "~


2
আমি এটি কোথায় যুক্ত করব? অ্যাপের প্রতিনিধিতে বিকল্পগুলির সাথে আরম্ভ করা হয়নি?
mhmdshawiki

আমি যখন এটি করি, তখন আমার স্ট্যাটাস বারটি সাদা হয়ে যায়
রোপো

6

আরকি হোল্টের উত্তরের একটি ছোট বিকল্প, কিছুটা সহজ:

ক। সেট UIViewControllerBasedStatusBarAppearanceথেকে NOinfo.plist মধ্যে

খ। ইন AppDelegateএর application:didFinishLaunchingWithOptions:, কল:

if ([[UIDevice currentDevice].systemVersion floatValue] < 7)
{
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
}
else
{
    // handling statusBar (iOS7)
    application.statusBarStyle = UIStatusBarStyleLightContent;
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    self.window.clipsToBounds = YES;

    // handling screen rotations for statusBar (iOS7)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidChangeStatusBarOrientationNotification:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
}

এবং পদ্ধতিটি যুক্ত করুন:

- (void)applicationDidChangeStatusBarOrientationNotification:(NSNotification *)notification
{
    // handling statusBar (iOS7)
    self.window.frame = [UIScreen mainScreen].applicationFrame;
}

আপনি নিজেই UIWindowপরিচালনা UIApplicationDidChangeStatusBarOrientationNotificationকরতে সাবক্লাসিং বিবেচনা করতে পারেন ।


আপনার কি বর্তমান ভিউকন্ট্রোলার: অ্যানিমেটেড: সমাপ্তি: নিয়ে সমস্যা আছে?
TĐỗng Đỗ

@ টাংগু সত্য, সুতরাং আমি একটি বিকল্প তৈরি করেছি যা আরও ভাল কাজ করে: stackoverflow.com/questions/18294872/…
Cœur

5

আমি আমার সমস্ত ভিউ কন্ট্রোলারে এটি ব্যবহার করেছি, এটি সহজ। আপনার সমস্ত দর্শনডিলড পদ্ধতিতে এই লাইনগুলি যুক্ত করুন:

- (void)viewDidLoad{
    //add this 2 lines:
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

    [super viewDidLoad];
}

1
কবজির মতো কাজ করেছেন, এবং সহজ মৃত। রুবি মোশনে, সুপার ব্যবহারের জন্য কল করার আগে: self.edgesForExtendedLayout = UIRectEdgeNon যদি সাড়া না দেয় ToSelector ("edgesForExtendedLayout")
তেহপরিফেসর

4

এই সহজ পদ্ধতিটি চেষ্টা করে দেখুন ....

পদক্ষেপ 1 : একক পরিবর্তনviewController

[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackOpaque];

পদক্ষেপ 2 : সম্পূর্ণ প্রয়োগ পরিবর্তন করতে

info.plist
      ----> Status Bar Style
                  --->UIStatusBarStyle to UIStatusBarStyleBlackOpaque

পদক্ষেপ 3 : এর জন্য উচ্চতা viewWillAppearসামঞ্জস্য করতে প্রতিটিটিতে এটি যুক্ত করুনstatusbariOS7

    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7) {
        CGRect frame = [UIScreen mainScreen].bounds;
        frame.origin.y+=20.0;
        frame.size.height-= 20.0;
        self.view.frame = frame;
        [self.view layoutIfNeeded];
    }

3

ইন্টারফেস বিল্ডারে একটি বিকল্প রয়েছে যা আইওএস 6/7 ডেল্টা সম্পত্তি কল করে যা অফসেট সমস্যা সমাধানের লক্ষ্য।

স্ট্যাক ওভারফ্লো প্রশ্নটিতে এটি দেখুন ইন্টারফেস বিল্ডার: ইউআইভিউয়ের লেআউট আইওএস 6/7 ডেল্টাস কীসের জন্য?


3

আমি আইওএস 7 এ আইওএস 6 এর মতো স্ট্যাটাস বারটি অর্জন করেছি।

ইউআইভিউকন্ট্রোলারবেসড স্ট্যাটাসবার অ্যাপ্লিকেশনটি ইনফরমেশন.লাইস্টে কোনও স্থানে সেট করুন

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsপদ্ধতিতে এই কোডটি প্রবিষ্ট করুন

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    self.window.clipsToBounds =YES;
    self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height);

    //Added on 19th Sep 2013
    NSLog(@"%f",self.window.frame.size.height);
    self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height);
}

এটি আপনার সমস্ত দর্শন 20 পিক্সেল দ্বারা চাপিয়ে দিতে পারে o যাতে -(void)viewDidAppear:(BOOL)animatedপদ্ধতিতে নিম্নলিখিত কোড ব্যবহার করুন

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    CGRect frame=self.view.frame;
    if (frame.size.height==[[NSUserDefaults standardUserDefaults] floatForKey:@"windowHeight"])
    {
        frame.size.height-=20;
    }
    self.view.frame=frame;
}

ফিনিশল্যান্সিং পদ্ধতিতে উইন্ডো বরাদ্দের পরে আপনাকে উইন্ডোহাইট ইউজারডিফল্টস মান সেট করতে হবে

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[NSUserDefaults standardUserDefaults] setFloat:self.window.frame.size.height forKey:@"windowHeight"];

আপনার ইউআইএনএভিগেশনবারকে height৪৪ এর পরিবর্তে equal৪ এর সমান করা আরও ভাল পদ্ধতির। তাহলে আপনার বারটি অ্যাপলের অ্যাপগুলির মতো শীর্ষেও প্রসারিত হবে।
অ্যারন ব্র্যাজার

@ অ্যারোনব্রেজার তবে আমার প্রয়োজন ছিল আইওএস style স্টাইলের স্ট্যাটাস বারটি দেখানো।
মরুভূমি রোজ

আপনি কি ল্যান্ডস্কেপ ওরিয়েন্টেশন আইওএস 7 এর সমাধান যুক্ত করতে পারেন? আমি একই জিনিস করছি। তবে এটি আইওএস 7 ল্যান্ডস্কেপে কাজ করছে না।
সতীমূর্তি

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

1
যতক্ষণ না আমি ডিভাইসটি ঘোরান (আমার আইওএস 7 ডিভাইস একটি আইপ্যাড), এটি এটিকে পুরোপুরি ঠিক করে দেয়। তবে একবার আমি ঘোরার পরে, কালো দণ্ডটি যেখানে রয়েছে ঠিক সেখানেই রয়েছে এবং "ভিউ" (দুঃখিত যদি এটি প্রযুক্তিগত শব্দটি ভুল হয় তবে আমি ফোনগ্যাপ / ওয়েব লোক) এর সঙ্কুচিত উচ্চতা বজায় রাখে - এটি আর উচ্চতা ছাড়াই থাকে না, তবে প্রস্থ. এই সমাধানটি ঘূর্ণন সমর্থন করে না তবে এটি আমি দেখেছি সেরা ফিক্স - ডিভাইস ঘোরার জন্য এটি কীভাবে উন্নত করা যায়? ধন্যবাদ!
টাইলার

2

আপনি যদি ইন্টারফেস নির্মাতা ব্যবহার করে থাকেন তবে এটি ব্যবহার করে দেখুন:

আপনার এক্সিব ফাইলটিতে:

1) প্রধান দর্শনটি নির্বাচন করুন, পটভূমির রঙটি কালোতে সেট করুন (বা স্ট্যাটাস বারটি আপনি যে রঙে চান তা রঙ করুন

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

3) এখন 20 pts দ্বারা নীচে লক হওয়া সমস্ত কিছু সরিয়ে নিন এবং একটি আইওএস 6/7 ডেল্টা ওয়াই -20 এ সেট করুন।
অটোসাইজিং প্যানেলে শীর্ষ স্তরের লক করা সমস্ত শীর্ষ স্তরের শিশুদের 20pts দ্বারা নামিয়ে আনা এবং তাদের আইওএস 6/7 ডেল্টা ওয়াই -20 এ সেট করা দরকার। (সিএমডি সেগুলি সব নির্বাচন করুন এবং 20 বার নীচে তীরটি ক্লিক করুন - এর চেয়ে ভাল উপায় আর কেউ আছে?)

4) উপরের আইটেমগুলির নমনীয় উচ্চতাযুক্ত আইওএস 6/7 ডেল্টা উচ্চতা সামঞ্জস্য করুন। ফ্রেম উপরে এবং নীচে লক করা এবং স্বতঃকরণ প্যানেলে সক্ষম নমনীয় উচ্চতা থাকা আইটেমগুলির মধ্যে তাদের আইওএস 6/7 ডেল্টা উচ্চতা 20 সেট করা থাকতে হবে। এতে উপরে উল্লিখিত ব্যাকগ্রাউন্ড ভিউ অন্তর্ভুক্ত রয়েছে। এটি বিরোধী স্বজ্ঞাত বলে মনে হতে পারে তবে এই ক্রমটি যেভাবে প্রয়োগ করা হয়েছে তার কারণে এটি প্রয়োজনীয়। ফ্রেমের উচ্চতা প্রথমে সেট করা হয়েছে (ডিভাইসের উপর ভিত্তি করে), তারপরে ডেল্টাস প্রয়োগ করা হবে এবং অবশেষে অটোসাইজিং মাস্কগুলি সমস্ত শিশু ফ্রেমের অফসেট পজিশনের উপর ভিত্তি করে প্রয়োগ করা হবে - এটি কিছুটা চিন্তা করে দেখুন, তা বোঝা যাবে।

5) অবশেষে, নীচের ফ্রেমে লক করা হয়েছে তবে শীর্ষ ফ্রেমের নয় এমন আইটেমগুলিতে কোনও ডেল্টাসের প্রয়োজন নেই।

এটি আপনাকে আইওএস 7 এবং আইওএস 6-তে অভিন্ন স্ট্যাটাস বার দেবে।

অন্যদিকে, আপনি যদি আইওএস 6 সামঞ্জস্য বজায় রেখে আইওএস 7 স্টাইলিং চান , তবে ব্যাকগ্রাউন্ড ভিউয়ের জন্য ডেল্টা ওয়াই / ডেল্টা উচ্চতার মান 0 তে সেট করুন।

আরও iOS7 স্থানান্তর তথ্য দেখতে সম্পূর্ণ পোস্টটি পড়ুন: http://uncompiled.blogspot.com/2013/09/legacy-comp موافق-offsets-in-ios7.html


অটো লেআউট ব্যবহার করার সময় কোনও
ডেল্টাস নেই

2

আমার সমাধানটি ছিল UIViewআইওএসে যখন উইন্ডোটির উপরে 20 পয়েন্টের উচ্চতা সহ একটি যুক্ত করা যায় তখন আমি "শক্ত" স্ট্যাটাস বারের পটভূমিটি দেখানোর / আড়াল করার জন্য আমার অ্যাপডেলিগেট ক্লাসে একটি পদ্ধতি তৈরি করেছি। ইন application:didFinishLaunchingWithOptions::

// ...

// Add a status bar background
self.statusBarBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 20.0f)];
self.statusBarBackground.backgroundColor = [UIColor blackColor];
self.statusBarBackground.alpha = 0.0;
self.statusBarBackground.userInteractionEnabled = NO;
self.statusBarBackground.layer.zPosition = 999; // Position its layer over all other views
[self.window addSubview:self.statusBarBackground];

// ...
return YES;

তারপরে আমি কালো স্ট্যাটাস বারের পটভূমিতে ফিড / আউট করার জন্য একটি পদ্ধতি তৈরি করেছি:

- (void) showSolidStatusBar:(BOOL) solidStatusBar
{
    [UIView animateWithDuration:0.3f animations:^{
        if(solidStatusBar)
        {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
            self.statusBarBackground.alpha = 1.0f;
        }
        else
        {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
            self.statusBarBackground.alpha = 0.0f;
        }
    }];
}

এখনই আমাকে যা করতে হবে তা হল [appDelegate showSolidStatusBar:YES]যখন প্রয়োজন হয়।


2

আপনি অটো লেআউট ব্যবহার করলে এটি অপ্রতিরোধ্য সমস্যা হতে পারে কারণ আপনি সরাসরি ফ্রেমগুলি আর পরিচালনা করতে পারবেন না। খুব বেশি কাজ না করেই একটি সহজ সমাধান রয়েছে।

আমি একটি ইউটিলিটি ক্লাসে একটি ইউটিলিটি পদ্ধতি লিখে শেষ করেছি এবং এটিকে সমস্ত ভিউ কন্ট্রোলারের viewDidLayoutSubviewsপদ্ধতি থেকে কল করেছি।

+ (void)addStatusBarIfiOS7:(UIViewController *)vc
    {
        if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
            CGRect viewFrame = vc.view.frame;
            if(viewFrame.origin.y == 20) {
                //If the view's y origin is already 20 then don't move it down.
                return;
            }
            viewFrame.origin.y+=20.0;
            viewFrame.size.height-= 20.0;
            vc.view.frame = viewFrame;
            [vc.view layoutIfNeeded];
        }
    }

viewDidLayoutSubviewsআপনি যেখানে স্ট্যাটাস বার চান সেখানে ভিউ কন্ট্রোলারে আপনার পদ্ধতিটি ওভাররাইড করুন । এটি আপনাকে অটোলেটের বোঝার মধ্যে দিয়ে পাবে।

- (void)viewDidLayoutSubviews
{
    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
    [super viewDidLayoutSubviews];
    [MyUtilityClass addStatusBarIfiOS7:self];
}

1

এটি করার সবচেয়ে সহজ উপায় হ'ল আপনার নতুন এক্সকোডে একটি পুরানো এসডিকে ইনস্টল করা।

কীভাবে পুরানো এসডিকে নতুন এক্সকোডে ইনস্টল করবেন?

  1. আপনি http://www.4shared.com/zip/NlPgsxz6/iPhoneOS61sdk.html থেকে iOS 6.1 এসডিকে পেতে পারেন বা একটি পুরানো এক্সকোড ডাউনলোড করতে এবং এর সামগ্রীগুলি থেকে এসডিকে পেতে পারেন

  2. এই ফোল্ডারটি আনজিপ করুন এবং / অ্যাপ্লিকেশনগুলি / এক্সকোড.এপ / সামগ্রীগুলি / ডেভেলপার / প্ল্যাটফর্ম / আইফোনস.প্ল্যাটফর্ম / ডেভেলপার / এসডিকে এ পেস্ট করুন

  3. এক্সকোড পুনরায় চালু করুন।

  4. আপনি এখন আপনার প্রকল্পের বিল্ড সেটিংসে একটি পুরানো এসডিকে নির্বাচন করতে পারেন

আশা করি এটি আপনাকে সহায়তা করবে। এটি আমার জন্য কাজ করেছে =)


আমার জন্য কাজ। ধন্যবাদ @ মার্সেলোসালোলুম তবে এখনও আমার অ্যাপ্লিকেশনটির ভবিষ্যতের আপডেটের জন্য আইওএস 7 এর স্বচ্ছ স্থিতি দণ্ডকে সমর্থন করার জন্য আমার ফোনগ্যাপ (ইউইউবিউভিউ) অ্যাপ্লিকেশনটির জন্য একটি কাজের সন্ধান করছে। আবার ধন্যবাদ. ;)
হ্যানিজম

@ মার্কসোসেলৌম, আপনি কি অ্যাপল অ্যাপল গ্রহণ করবেন বলে নিশ্চিত? তারা বলেছিল যে এক্সকোড 4 দিয়ে সংকলিত অ্যাপ্লিকেশনগুলিকে আর গ্রহণ করা হবে না ... এটি আসলে আইওএস 6 এসডিকে হিসাবে বোঝায়।
ভ্যালারিও

আমার অ্যাপ্লিকেশনটি সত্যই গৃহীত হয়েছিল কারণ Xcode5 পুরানো আইওএস এসডিকে সংকলন করতে পারে। আমি নিশ্চিত না যে অ্যাপস্টোর Xcode4 নির্মিত অ্যাপ্লিকেশনগুলিকে প্রত্যাখ্যান করবে কিনা তবে (Xcode4! = IOS 6 SDK) আপনি যেমন বলেছিলেন তেমন।
marcelosalloum

এটা কি 1 লা ফেব্রুয়ারির পরে? সেদিন অ্যাপল সেই বাধ্যতামূলক করেছিল।
ভ্যালারিও

না, সর্বশেষে গত বছর সেই কোডটি স্পর্শ করেছে, লোক। অ্যাপল যে বাধ্যতামূলক করেছে তা জানতেন না (যদিও তা জানতে পেরে খুশি নন)। আপনি কি দয়া করে এখানে লিঙ্কটি পোস্ট করবেন? চিয়ার্স
মার্স্লোসালোলৌম

1

presentViewController:animated:completion:মিসড-আপটি ব্যবহার করার সময় window.rootViewController.view, আমাকে এই সমস্যাটির জন্য একটি ভিন্ন পদ্ধতির সন্ধান করতে হয়েছিল। শেষ পর্যন্ত আমি আমার রুটভিউ কনট্রোলারের ইউআইভিউ সাবক্লাসিং করে মডেলগুলি এবং রোটেশনগুলির সাথে কাজ করতে পেরেছি।

@interface RootView : UIView

@end

.m

@implementation RootView

-(void)setFrame:(CGRect)frame
{
    if (self.superview && self.superview != self.window)
    {
        frame = self.superview.bounds;
        frame.origin.y += 20.f;
        frame.size.height -= 20.f;
    }
    else
    {
        frame = [UIScreen mainScreen].applicationFrame;
    }

    [super setFrame:frame];
}

- (void)layoutSubviews
{
    self.frame = self.frame;

    [super layoutSubviews];
}

@end

IOS7 অ্যানিমেশনগুলির জন্য আপনার কাছে এখন শক্তিশালী কাজ work


1

এই উত্তরের জন্য আমি দেরি করে ফেলেছি তবে আমি যা করেছি তা ভাগ করে নিতে চাই যা মূলত সবচেয়ে সহজ সমাধান

সবার আগে-> আপনার info.plistফাইলে যান এবং স্ট্যাটাস বার স্টাইল যুক্ত করুন -> স্বচ্ছ কালো স্টাইল (০.০ এর আলফা)

এখন, এখানে যায়:

আপনার AppDelegate.m এ এই কোডটি যুক্ত করুন

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
     //Whatever your code goes here
  if(kDeviceiPad){

     //adding status bar for IOS7 ipad
         if (IS_IOS7) {
              UIView *addStatusBar = [[UIView alloc] init];
              addStatusBar.frame = CGRectMake(0, 0, 1024, 20);
              addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //change this to match your navigation bar
              [self.window.rootViewController.view addSubview:addStatusBar];
                    }
                }
    else{

         //adding status bar for IOS7 iphone
        if (IS_IOS7) {
            UIView *addStatusBar = [[UIView alloc] init];
            addStatusBar.frame = CGRectMake(0, 0, 320, 20);
            addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //You can give your own color pattern
            [self.window.rootViewController.view addSubview:addStatusBar];
        }

    return YES;
   }

0

আমার খুব সাধারণ সমাধান (ধরে নিলে আপনি কেবল উলম্ব দিকনির্দেশনা সমর্থন করেছেন) হ'ল আইওএস সংস্করণগুলির জন্য অ্যাপ্লিকেশন উইন্ডো সীমানাকে below এর নীচে পুনরায় সংজ্ঞায়িত করা হবে, অ্যাপ প্রতিনিধি ডিফিনিশ লঞ্চিং উইথঅ্যাপশন পদ্ধতিতে:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
if ([HMService getIOSVersion] < 7) {
    // handling statusBar (iOS6) by leaving top 20px for statusbar.
    screenBounds.origin.y = 20;
    self.window = [[UIWindow alloc] initWithFrame:screenBounds];
}
else {
    self.window = [[UIWindow alloc] initWithFrame:screenBounds];
}

আপনার কোডটি কেবল 'y' 0 থেকে 20-এ স্থানান্তর করে তবে সেই অনুযায়ী উচ্চতা সামঞ্জস্য করে না যাতে আপনার স্ক্রিনবাউন্ড.সাইজ.হাইট - = 20; স্ক্রিনবাউন্ডস.রিগিন.ই = 20 পরে;
অমিত সি

0

আপনি সমস্ত একসাথে স্ট্যাটাস বারটি আড়াল করতে পারেন। সুতরাং আপনার অ্যাপ্লিকেশন পূর্ণ স্ক্রিন হবে। আমি মনে করি এটিই আপনি সেরা পাবেন।

UIStatusBarStyleNone অথবা লক্ষ্য সেটিংসে সেট করুন।


2
যেখানে ইউআইএসটিটিসবারস্টাইলোনোন নির্দিষ্ট করতে হবে
user4951

0

আইওএস 7 এ স্থিতি বারটি আড়াল করার পদক্ষেপগুলি:

1. আপনার অ্যাপ্লিকেশন তথ্য.পলিট ফাইল যান।

২.এন্ড সেট, কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন: বুলিয়ান না

আশা করি স্ট্যাটাস বারের সমস্যা সমাধান করেছি .....


0

সেট স্ট্যাটাসবারহিডিনের সাথে কাজ চালিয়ে যাওয়ার জন্য: আমি এই বিভাগটি ব্যবহার করি:

@interface UIApplication (StatusBar)

-(void)setIOS7StatusBarHidden:(BOOL)statusBarHidden;

@end

@implementation UIApplication (StatusBar)

-(void)setIOS7StatusBarHidden:(BOOL)statusBarHidden{
    if (!IOS7) {
        [self setStatusBarHidden:statusBarHidden];
        return;
     }

    if ([self isStatusBarHidden] == statusBarHidden) {
        return;
    }

    [self setStatusBarHidden:statusBarHidden];
    [self keyWindow].clipsToBounds = YES;
    CGFloat offset = statusBarHidden ? 0 : 20;
    [self keyWindow].frame =  CGRectMake(0,offset,[self keyWindow].frame.size.width,[self keyWindow].frame.size.height-offset);
    [self keyWindow].bounds = CGRectMake(0, offset, [self keyWindow].frame.size.width,[self keyWindow].frame.size.height);
}

@end

0

আমি এখানে পেয়েছি আইওএস 7-তে এই নেভিগেশন বার ইস্যুর জন্য সর্বোত্তম বিকল্প এবং সমাধান !!

http://www.appcoda.com/customize-navigation-status-bar-ios-7/

আমি আশা করি এটি আমাদের সমস্ত প্রশ্ন এবং উদ্বেগগুলি মুছে ফেলবে।


0

এটি ভাগ করতে খুব দেরী হতে পারে, তবে আমার কিছু অবদান রাখতে হবে যা কাউকে সাহায্য করতে পারে, আমি ইউআইএনএভিগেশনবারকে সাব-শ্রেণীর চেষ্টা করছিলাম এবং এটি কালো স্ট্যাটাস বার এবং সাদা স্ট্যাটাস বারের পাঠ্য সহ আইওএস 6 এর মতো দেখতে তৈরি করতে চাইছিলাম।

এখানে আমি তার জন্য কাজ করতে পেলাম

        self.navigationController?.navigationBar.clipsToBounds = true
        self.navigationController?.navigationBar.translucent = false
        self.navigationController?.navigationBar.barStyle = .Black
        self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

এটি আমার স্ট্যাটাস বারের পটভূমি কালো, স্ট্যাটাস বারের পাঠ্যকে সাদা এবং নেভিগেশন বারের রঙ সাদা করে তুলেছে।

আইওএস 9.3, এক্সকোড 7.3.1

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