iOS 7 स्थिति पट्टी iOS ऐप में वापस 6 डिफ़ॉल्ट शैली?


292

आईओएस 7 UIStatusBarमें इस तरह से डिजाइन किया गया है कि यह इस तरह से देखने के साथ विलीन हो जाता है:

टीएन तेवर द्वारा निर्मित जीयूआई ( टीएन तेवर द्वारा निर्मित जीयूआई )

  • यह शांत है, लेकिन यह कुछ हद तक आपके दृष्टिकोण को गड़बड़ कर देगा जब आपके पास अपने दृश्य के शीर्ष भाग में कुछ होगा, और यह स्थिति पट्टी के साथ अतिव्यापी हो जाती है।

  • क्या एक सरल समाधान है (जैसे कि info.plist में एक संपत्ति सेट करना) जो कि काम करने के तरीके को बदल सकता है [अतिव्यापी नहीं] वापस कैसे iOS6 में है?

  • मुझे पता है कि self.view.center.xहर एक दृश्य नियंत्रक के लिए + 20 अंक के लिए एक और अधिक सरल समाधान है , लेकिन उन्हें बदलने से अन्य आयाम खराब हो जाएंगे (एक अलग self.view.center.xसे कस्टम सेगमेंट आदि की समस्या हो सकती है) और अचानक यह एक थकाऊ काम में बदल जाता है जो कि है बचने के लिए सबसे अच्छा है।

  • अगर कोई मुझे इसके लिए एक लाइनर समाधान प्रदान कर सकता है तो मुझे वास्तव में खुशी होगी।

पुनश्च मुझे पता है कि मैं स्थिति पट्टी को छिपाने के लिए जैसी चीजें कर सकता हूं

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

में didFinishLaunchingWithOptionsविधि है, लेकिन यह, एक समाधान, एक शॉर्टकट समस्या से परहेज है, इसलिए मुझे लगता है कि कोई वास्तविक समाधान पर विचार नहीं है।


6
दुख की बात है कि ब्लैक स्टेटस बार को ios 7 में
चित्रित किया

मैं @GangstaGraham से सहमत हूं। वे रंग सिर्फ सुंदर हैं ! आपके प्रश्न का उत्तर देने के लिए, मुझे डर है कि आप नहीं कर सकते। स्टेटस बार को इस तरह से डिज़ाइन किया गया है, क्योंकि ट्रांसलूसी नई iOS चीज़ है और इसे किसी चीज़ के शीर्ष पर कहकर किसी एप्लिकेशन को "गहराई" देने के लिए डिज़ाइन किया गया है, इसलिए नीचे कुछ है।
कोल जॉनसन

क्या आपने UIStatusBarDefault को तरजीह देने की कोशिश की है? Checkout iOS 7 UIViewController Documentation
theaob

1
UIStatusBarDefaultस्टेटस बार के लिए होने से केवल इसकी सामग्री का रंग काला होता है। यह जिस तरह से यह iOS6 में है वापस काम करता है बनाने के लिए नहीं जा रहा है।
He 说 - 吖 आर्ची विल

2
इसके साथ कोई भाग्य? मुझे iOS7 बहुत पसंद है लेकिन यह बात मुझे पागल कर रही है!
मिहाई फ्रेटु

जवाबों:


449

यह मेरे द्वारा लिखे गए एक ब्लॉग पोस्ट से क्रॉस-पोस्ट किया गया है , लेकिन यहां आईओएस 7 पर स्टेटस बार, नेविगेशन बार और कंटेनर व्यू कंट्रोलर पर पूरा रंडाउन है:

  1. IOS 6 स्टाइल स्टेटस बार लेआउट को संरक्षित करने का कोई तरीका नहीं है। स्थिति पट्टी हमेशा iOS 7 पर आपके एप्लिकेशन को ओवरलैप करेगी

  2. स्टेटस बार लेआउट के साथ स्टेटस बार उपस्थिति को भ्रमित न करें। उपस्थिति (प्रकाश या डिफ़ॉल्ट) यह प्रभावित नहीं करता है कि स्थिति पट्टी कैसे रखी जाती है (फ्रेम / ऊंचाई / ओवरलैप)। यह नोट करना महत्वपूर्ण है कि सिस्टम स्थिति पट्टी में अब कोई पृष्ठभूमि रंग नहीं है। जब एपीआई UIStatusBarStyleLightContent को संदर्भित करता है, तो उनका मतलब स्पष्ट पृष्ठभूमि पर सफेद पाठ है। UIStatusBarStyleDefault एक स्पष्ट पृष्ठभूमि पर काला पाठ है।

  3. स्टेटस बार उपस्थिति को दो परस्पर-अनन्य आधार रास्तों में से एक के साथ नियंत्रित किया जाता है: आप या तो उन्हें पारंपरिक तरीके से प्रोग्राम सेट कर सकते हैं, या यूआईवाईवी आपके लिए UIViewController के कुछ नए गुणों के आधार पर उपस्थिति को अपडेट करेगा। बाद वाला विकल्प डिफ़ॉल्ट रूप से चालू है। "ViewController- आधारित स्थिति बार उपस्थिति" के लिए अपने ऐप के प्लिस्ट मान की जांच करें कि आप किसका उपयोग कर रहे हैं। यदि आप इस मान को YES में सेट करते हैं, तो आपके ऐप के प्रत्येक शीर्ष-स्तरीय दृश्य नियंत्रक (एक मानक UIKit कंटेनर व्यू कंट्रोलर के अलावा) को वरीयस्टैटसबर्सेल्टी को ओवरराइड करने की आवश्यकता है, जो कि डिफ़ॉल्ट या लाइट शैली को लौटाता है। यदि आप प्लिस्ट मान को NO में संपादित करते हैं, तो आप परिचित UIApplication विधियों का उपयोग करके स्थिति बार उपस्थिति का प्रबंधन कर सकते हैं।

  4. UinavigationController अपने UINavigationBar की ऊँचाई को 44 या तो या 64 बिंदुओं तक बदल देगा, जो बाधाओं के एक अजीब और अनिर्दिष्ट सेट पर निर्भर करता है। यदि UINavigationController पता लगाता है कि इसके दृश्य के शीर्ष अपने UIWindow के शीर्ष के साथ नेत्रहीन है, तो यह 64 अंक की ऊंचाई के साथ अपने नेविगेशन बार को खींचता है। यदि UIWindow के शीर्ष (भले ही केवल एक बिंदु से बंद हो) के साथ इसका दृश्य शीर्ष नहीं है, तो यह 44 अंकों की ऊँचाई के साथ "पारंपरिक" तरीके से अपने नेविगेशन बार को खींचता है। यह तर्क UINavigationController द्वारा किया जाता है, भले ही यह आपके आवेदन के दृश्य नियंत्रक पदानुक्रम के अंदर कई बच्चे हो। इस व्यवहार को रोकने का कोई तरीका नहीं है।

  5. यदि आप एक कस्टम नेविगेशन बार पृष्ठभूमि छवि की आपूर्ति करते हैं जो केवल 44 अंक (88 पिक्सल) लंबा है, और UINavigationController के दृश्य UIWindow की सीमा से मेल खाते हैं (जैसा कि # 4 में चर्चा की गई है), UINavigationController फ्रेम में आपकी छवि को आकर्षित करेगा (0,20,320) , 44), अपनी कस्टम छवि के ऊपर अपारदर्शी काले स्थान के 20 बिंदुओं को छोड़कर। यह आपको सोच में भ्रमित कर सकता है कि आप एक चतुर डेवलपर हैं जिन्होंने नियम # 1 को दरकिनार कर दिया है, लेकिन आप गलत हैं। नेविगेशन बार अभी भी 64 अंक लंबा है। एक UINavigationController को स्लाइड-टू-स्‍टाइल-शैली शैली में पदानुक्रम में एम्बेड करना इसे बहुतायत से स्‍पष्‍ट करता है।

  6. UIViewController की भ्रामक रूप से नामित किनारों से सावधान रहें। एडजस्ट होने वाले किनारों को ज्यादातर मामलों में कुछ नहीं करता है। इस संपत्ति का उपयोग करने का एकमात्र तरीका यह है कि यदि आप एक UINavigationController के लिए व्यू कंट्रोलर जोड़ते हैं, तो यह निर्धारित करने के लिए कि क्या उसका चाइल्ड व्यू कंट्रोलर नेविगेशन बार / स्टेटस बार क्षेत्र के नीचे दिखाई दे रहा है या नहीं, UINavigationController किनारों का उपयोग करता है। UINavigationController पर किनारों को सेट करने के लिए स्वयं को संशोधित करना कुछ भी परिवर्तन नहीं करता है या नहीं UINavigationController में 44 या 64 बिंदु उच्च नेविगेशन बार क्षेत्र है। उस तर्क के लिए # 4 देखें। टूलबार या UITabBarController का उपयोग करते समय इसी तरह का लेआउट तर्क आपके विचार के नीचे लागू होता है।

  7. यदि आप सभी करने की कोशिश कर रहे हैं तो आपके कस्टम चाइल्ड व्यू कंट्रोलर को UINavigationController के अंदर नेविगेशन बार को अंडरप्ले करने से रोका जाए, तो किनारों को सेट करें UIRectEdgeNone (या कम से कम एक मुखौटा जो UIRectEdgeTop को बाहर करता है) के लिएForExtendedLayout सेट करें। इस मूल्य को अपने व्यू कंट्रोलर के जीवन चक्र में यथाशीघ्र सेट करें।

  8. UINavigationController और UITabBarController भी अपने सबव्यू पदानुक्रम में तालिका विचारों और संग्रह विचारों के सामग्री को पैड करने की कोशिश करेंगे। यह # 4 से स्टेटस बार लॉजिक के समान तरीके से करता है। इसे रोकने का एक प्रोग्राम तरीका है, स्वचालित रूप से AdAdsscrollViewInsets को आपके टेबल व्यू और कलेक्शन व्यू (यह हाँ में चूक करता है) के लिए सेट करके। इसने व्हिस्पर और रिपोस्टे के लिए कुछ गंभीर समस्याएं पैदा कीं, क्योंकि हम टूलबार और कीबोर्ड आंदोलनों के जवाब में तालिका विचारों के लेआउट को नियंत्रित करने के लिए contentInset समायोजन का उपयोग करते हैं।

  9. दोहराए जाने के लिए: आईओएस 6 स्टाइल स्टेटस बार लेआउट लॉजिक पर लौटने का कोई तरीका नहीं है। इसे अनुमानित करने के लिए, आपको अपने ऐप के सभी दृश्य नियंत्रकों को एक कंटेनर दृश्य में स्थानांतरित करना होगा, जो स्क्रीन के शीर्ष से 20 बिंदुओं से ऑफसेट होता है, पुरानी उपस्थिति को अनुकरण करने के लिए जानबूझकर काले दृश्य को स्थिति पट्टी के पीछे छोड़ देता है। यह वह विधि है जिसे हमने रिपोस्टे और व्हिस्पर में उपयोग करके समाप्त किया है।

  10. Apple यह सुनिश्चित करने के लिए बहुत जोर दे रहा है कि आप # 9 करने की कोशिश न करें। वे चाहते हैं कि हम अपने सभी ऐप को स्टेटस बार को फिर से डिज़ाइन करें। हालांकि, उपयोगकर्ता अनुभव और तकनीकी कारणों दोनों के लिए कई तर्कों पर आधारित हैं, यह हमेशा एक अच्छा विचार क्यों नहीं है। आपको वही करना चाहिए जो आपके उपयोगकर्ताओं के लिए सबसे अच्छा है और न केवल प्लेटफॉर्म की सनक का पालन करें।


35
बस यह जोड़ना चाहता था कि आप शीर्ष लेआउट गाइड से जुड़े रहने के लिए अपने दृष्टिकोण के शीर्ष पर जो कुछ भी हो, उसमें एक बाधा जोड़ सकते हैं - यह स्टेटस बार के पीछे एक रिक्त स्थान छोड़ देगा (जिसे आप जो भी रंग आप चाहें भर सकते हैं) लेकिन यह भी देखने के लिए स्वतः ही iOS 6 में सही स्थिति को समायोजित करने की अनुमति देगा। इस तरह आपको कोड में अपने विचारों की स्थिति को मैन्युअल रूप से समायोजित करने की आवश्यकता नहीं है।
ब्रेडिकलएमडीपी

4
यह एक शानदार उपाय है। आपने AutoLayout पर अपनी अज्ञानता को उजागर किया है। उस पर बेहतर हो।
jaredsinclair

1
यदि आप अपने ऑब्जेक्ट के शीर्ष स्थान को शीर्ष लेआउट गाइड के किनारे के नीचे रखते हैं, तो आप निकटतम पड़ोसी को एक ऊर्ध्वाधर रिक्ति बाधा जोड़ने के लिए बाधा नियंत्रण का उपयोग कर सकते हैं, जो अब शीर्ष लेआउट गाइड होगा। वैकल्पिक रूप से आप स्पष्ट रूप से एक ऊर्ध्वाधर रिक्ति बाधा जोड़ने के लिए ctrl + अपनी वस्तु से शीर्ष लेआउट गाइड पर क्लिक कर सकते हैं।
ब्रेडिकलएमडीपी

2
@BreadicalMD एक हिस्सा मुझे समझ में नहीं आता है कि -topLayoutGuide iOS 6 पर उपलब्ध नहीं है, तो इसका मतलब है कि आपको iOS 7 और 6 पर विभिन्न ऑटो लेआउट बाधाओं का उपयोग करने की आवश्यकता है?
जेरेमी

1
शानदार उत्तर ... लेकिन मुझे एक संदेह है 1) UINavigationController ऊंचाई भाग को बदल रहा है। कृपया इसे थोड़ा और समझाएं। धन्यवाद
user1010819

122

19 सितंबर 2013 को अपडेट:

फिक्स्ड स्केलिंग बग को जोड़कर self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);

NSNotificationCenterबयान में सही टाइपो


12 सितंबर 2013 को अपडेट:

को सही UIViewControllerBasedStatusBarAppearanceकियाNO

स्क्रीन रोटेशन के साथ ऐप्स के लिए एक समाधान जोड़ा गया

स्थिति पट्टी की पृष्ठभूमि का रंग बदलने के लिए एक दृष्टिकोण जोड़ा।


जाहिरा तौर पर, iOS6 स्थिति पट्टी को वापस करने का कोई तरीका नहीं है कि यह iOS6 में कैसे काम करता है।

हालाँकि, हम हमेशा कुछ कोड लिख सकते हैं और स्टेटस बार को iOS6 की तरह बदल सकते हैं, और यह सबसे छोटा तरीका है, जिसके साथ मैं आ सकता हूं:

  1. सेट UIViewControllerBasedStatusBarAppearanceकरने के लिए NOमें info.plist(देखें नियंत्रकों हम UIApplicationstatusBarStyle विधि का उपयोग कर स्थिति पट्टी शैली सेट कर सकते हैं कि इतने स्थिति पट्टी शैली को समायोजित होने से रोक करने के लिए।)

  2. AppDelegate's में 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. जांचें कि क्या यह iOS 7 है।

  2. UIStatusBarStyleDefault के विपरीत, सफेद होने की स्थिति पट्टी की सामग्री सेट करें।

  3. उन सबव्यू से बचें जिनके फ्रेम दृश्यमान सीमा से अधिक दिखाई दे रहे हैं (ऊपर से मुख्य दृश्य में एनिमेटेड विचारों के लिए)।

  4. भ्रम पैदा करें कि स्टेटस बार स्पेस लेता है जैसे कि iOS 6 में ऐप के विंडो फ्रेम को शिफ्ट और रिसाइज करके कैसा है।


स्क्रीन रोटेशन वाले ऐप्स के लिए,

जोड़कर अभिविन्यास परिवर्तन का पता लगाने के लिए NSNotificationCenter का उपयोग करें

[[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);
    }
}

ताकि जब अभिविन्यास बदल जाए, तो यह ऐप के स्क्रीन ओरिएंटेशन (पोर्ट्रेट, अपसाइड डाउन, लैंडस्केप लेफ्ट, या लैंडस्केप राइट) का पता लगाने के लिए एक स्विच स्टेटमेंट को ट्रिगर करेगा और iOS 6 स्टेटस बार भ्रम बनाने के लिए ऐप के विंडो फ्रेम को क्रमशः बदल देगा।


अपने स्टेटस बार की पृष्ठभूमि का रंग बदलने के लिए:

जोड़ना

 @property (retain, nonatomic) UIWindow *background;

में AppDelegate.hबनाने के लिए backgroundअपनी कक्षा में एक संपत्ति है और इसे deallocating से एआरसी को रोकने के। (यदि आप एआरसी का उपयोग नहीं कर रहे हैं तो आपको ऐसा करने की आवश्यकता नहीं है।)

उसके बाद आपको बस UIWindow बनाने की आवश्यकता है 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 पिक्सेल बहुत अधिक है।
15:57

4
@ArchyHolt: आपके सरल समाधान मेरे लिए काम करते हैं सिवाय जब मैं एक मोडल व्यू कंट्रोलर प्रस्तुत करता हूं। एक बार मोडल व्यू कंट्रोलर खारिज हो जाने के बाद, शेष दृश्य अब स्टेटस बार के अंतर्गत है। मैंने यह सुनिश्चित करने के लिए एक ताजा नमूना परियोजना में पुन: पेश किया है कि वहाँ कुछ और नहीं चल रहा है। मैं सोच रहा हूं कि शायद आपका अधिक उन्नत समाधान यहां उपयोगी हो सकता है लेकिन यह सुनिश्चित नहीं है कि अधिसूचना क्या खेल में आएगी। कोई विचार?
markdorison

4
एक दृश्य दृश्य नियंत्रक को खारिज करने के बाद दृश्य रीसेट करता है। :(
करेनएने

41

अद्यतन (नया समाधान)

यह अपडेट iOS 7 नेविगेशन बार समस्या का सबसे अच्छा समाधान है। आप नेविगेशन बार रंग उदाहरण सेट कर सकते हैं: FakeNavBar.backgroundColor = [UIColor redColor];

नोट: यदि आप डिफ़ॉल्ट नेविगेशन नियंत्रक का उपयोग करते हैं तो कृपया पुराने समाधान का उपयोग करें।

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;

}

पुराने समाधान - यदि आप पिछले कोड का उपयोग करते हैं तो कृपया कोड और छवि का पालन करें

यह iOS 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];
}

और इंटरफ़ेस बिल्डर के लिए यह तब होता है जब आप iOS 6 के साथ खोलते हैं; यह 0 पिक्सेल पर शुरू हो रहा है।

नोट: iOS 6/7 डेल्टास केवल तभी प्रकट होता है जब आप विवरण फलक में "फ़ाइल इंस्पेक्टर" (बाएं-सबसे आइकन) में व्यू कंट्रोलर के लिए "ऑटोलॉयआउट का उपयोग करें" को अनचेक करते हैं।

यहां छवि विवरण दर्ज करें


6
आपने मेरा दिन बना दिया। +1 सहायता के लिए!
नीरू मुकुंद शाह

5
कृपया ध्यान दें: iOS 6/7 डेल्टास केवल तभी प्रकट होता है जब आप विवरण फलक में "फ़ाइल इंस्पेक्टर" (बाएं-सबसे आइकन) में व्यू कंट्रोलर के लिए "ऑटोलॉयआउट का उपयोग करें" को अनचेक करते हैं।
मैट

1
आपका बहुत बहुत धन्यवाद! आपने मुझे बहुत तकलीफ से बचाया!
नेविन्स्टन

2
किसने कहा कि iOS 6 स्टाइल स्टेटस बार लेआउट को बनाए नहीं रखा जा सकता है, आप इसे @ Tacettin 6zbölük तरह से कर सकते हैं ... इस awsum समाधान के लिए धन्यवाद दोस्त।
विज़्लेक्स

1
अच्छा है! यह भी ध्यान दें कि सिर्फ सेब को ध्यान में रखते हुए अब इसे पसंद करें: अगर (NSFoundationVersionNumber> = NSFoundationVersionNumber_iOS_6_1) {}
जोएल बामर

26

समाधान :

विधि को ओवरराइड करके इसे अपने दृश्य-केंद्र में या rootviewcontroller में सेट करें:

-(BOOL) prefersStatusBarHidden
    {
        return YES;
    }

बुरा हल नहीं है। बार को पूरी तरह से हटा दें। हो सकता है कि हर समय यूएक्स के लिए आदर्श न हो लेकिन व्यावहारिक।
फरहान हफीज

अद्भुत। मेरे लिए निर्दोष रूप से काम किया।
madLokesh

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

मैं केवल इस पद्धति का उपयोग करके सफल रहा हूं
user2277872

17

यहां उन परियोजनाओं के लिए एक और दृष्टिकोण है जो स्टोरीबोर्ड का व्यापक उपयोग करते हैं:

लक्ष्य:

इस दृष्टिकोण का लक्ष्य iOS7 में उसी स्थिति बार शैली को फिर से बनाना है जैसा कि iOS6 में था (प्रश्न शीर्षक "iOS 7 स्थिति बार वापस iOS 6 शैली में देखें?")।

सारांश:

इसे प्राप्त करने के लिए हम स्टोरीबोर्ड का उपयोग यूआई तत्वों को स्थानांतरित करके यथासंभव कर सकते हैं जो स्टेटस बार (iOS 7 के तहत) से नीचे की ओर ओवरलैप किए गए हैं, जबकि डेल्टा का उपयोग करके iOS 6.1 या इससे पहले के डाउनवर्ड लेआउट परिवर्तन को वापस करने के लिए। IOS 7 में परिणामी अतिरिक्त स्थान पर UIView द्वारा कब्जा कर लिया गया है, पृष्ठभूमि के साथ हमारे चयन के रंग में सेट है। बाद वाले को कोडबोर्ड या स्टोरीबोर्ड का उपयोग करके बनाया जा सकता है (नीचे ALTERNATIVES देखें)

मान्यताओं:

नीचे दिए गए चरणों का पालन करते हुए वांछित परिणाम प्राप्त करने के लिए, यह माना जाता है कि View controller-based status bar appearanceNO पर सेट है और आपका Status bar styleया तो "पारदर्शी काली शैली (0.5 का अल्फा)" या "अपारदर्शी काली शैली" पर सेट है। दोनों सेटिंग्स को आपकी परियोजना सेटिंग्स में "जानकारी" के तहत पाया जा सकता है या जोड़ा जा सकता है।

कदम:

  • अपने स्टेटस बार बैकग्राउंड के रूप में सेवा करने के लिए UIWindow में एक सबव्यू जोड़ें। इसे प्राप्त करने के लिए, अपने AppDelegate के 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 के लिए केवल एक बैकग्राउंड जोड़ा है, इसलिए आपको अपने UI तत्वों के लेआउट को समायोजित करना होगा जो iOS6 के लिए उनके लेआउट को संरक्षित करते हुए तदनुसार स्थिति बार द्वारा ओवरलैप किए जाते हैं। इसे प्राप्त करने के लिए, निम्नलिखित करें:

    • सुनिश्चित करें कि Use Autolayoutआपके स्टोरीबोर्ड के लिए अनियंत्रित है (यह इसलिए है क्योंकि अन्यथा "आईओएस 6/7 डेल्टास" को आकार निरीक्षण में नहीं दिखाया गया है)। यह करने के लिए:
      • अपनी स्टोरीबोर्ड फ़ाइल चुनें
      • उपयोगिताएँ दिखाएं
      • "फ़ाइल इंस्पेक्टर दिखाएँ" चुनें
      • "इंटरफ़ेस बिल्डर दस्तावेज़" के तहत "अनचाहे उपयोग करें" को अनचेक करें
    • वैकल्पिक रूप से, आईओएस 7 और 6 दोनों के लिए लेआउट परिवर्तनों की निगरानी करने में आपकी मदद करने के लिए जैसा कि आप उन्हें लागू करते हैं, "सहायक संपादक" का चयन करें, "पूर्वावलोकन" और "iOS 6.1 या पहले का चयन करें": यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें
    • अब आप जिस UI एलिमेंट को एडजस्ट करना चाहते हैं उसे सेलेक्ट करें ताकि यह स्टेटस बार द्वारा ओवरलैप न हो
    • यूटिलिटीज़ कॉलम में "साइज़ इंस्पेक्टर दिखाएं" चुनें
    • Y- अक्ष के साथ अपने UI तत्व को स्टेटबार bg ऊँचाई के समान मात्रा में बदलें: यहां छवि विवरण दर्ज करें
    • और iOS6 / 7 Deltas मान को Y के लिए उसी NEGATIVE राशि द्वारा स्थित करें जैसे कि स्टेटबार bg ऊँचाई (यदि आप इसका उपयोग कर रहे हैं तो iOS 6 पूर्वावलोकन में परिवर्तन पर ध्यान दें): यहां छवि विवरण दर्ज करें

विकल्प:

स्टोरीबोर्ड-हेवी प्रोजेक्ट्स में और भी कम कोड जोड़ने के लिए और अपने स्टेटसबार के लिए बैकग्राउंड जोड़ने के बजाय स्टेटबार बैकग्राउंड ऑटोरोटेट रखने के लिए, आप प्रत्येक व्यू कंट्रोलर के लिए एक रंगीन दृश्य जोड़ सकते हैं जो उक्त व्यूवरोलर के मुख्य दृश्य के बहुत ऊपर बैठता है। फिर आप इस नए दृश्य की ऊँचाई के डेल्टा को उसी नकारात्मक राशि में बदल देंगे, जितना कि आपके दृश्य की ऊँचाई (इसे iOS 6 के अंतर्गत गायब करने के लिए)।

इस विकल्प का नकारात्मक पहलू (हालांकि शायद ऑटोरोटेट अनुकूलता पर विचार करने के लिए नगण्य है) तथ्य यह है कि यह अतिरिक्त दृश्य तुरंत दिखाई नहीं देता है यदि आप iOS के लिए अपना स्टोरीबोर्ड देख रहे हैं। आप केवल यह जान पाएंगे कि यदि आप पर एक नज़र थी तो यह वहाँ है। स्टोरीबोर्ड का दस्तावेज़ रूपरेखा "।


12

यदि आप नहीं चाहते हैं कि आपके व्यू कंट्रोलर को स्टेटस बार (और नेविगेशन बार) द्वारा ओवरलैप किया जाए, तो Xcode 5 में इंटरफ़ेस बिल्डर में "एक्स्टेंड एड्स अंडर टॉप बार्स" बॉक्स को अनचेक करें ।

टॉप बार्स के नीचे एक्स्टेंड के किनारों को अनचेक करें


7
यह तभी संभव है जब आप स्टोरीबोर्ड का उपयोग करते हैं
C onlyur

3
यह नेविगेशन कंट्रोलर या टैब्बर कंट्रोलर
एंड्रिया

2
किनारों का उपयोग केवल सही तरीके से कंटेनर व्यू कंट्रोलरों (यूआईएनविजेंसीकंट्रोलर) द्वारा किया जाता है ताकि यह निर्धारित किया जा सके कि यह बच्चों के विचारों को माता-पिता के क्रोम द्वारा ओवरलैप किया जाना चाहिए। UIWindow के लिए रूट व्यू कंट्रोलर पर इस प्रॉपर्टी को सेट करने से कुछ नहीं होता है। मेरा जवाब ऊपर देखें: stackoverflow.com/questions/18294872/…
jaredsinclair

आप इसे UITabBarController @Andrea के लिए कैसे करते हैं? धन्यवाद।
करेनएने

यदि आप प्रोग्रामेटिक रूप से या स्टोरीबोर्ड्स के साथ @KarenAnne निर्भर हैं। प्रोग्रामेटिक रूप से आपको बस किनारों को सेट करने की आवश्यकता है जो आप UITabBarViewController के अंदर जो व्यू कंट्रोलर दिखा रहे हैं उसमें आपको क्या पसंद है, लेकिन स्टेटस बार की समस्या न हो इसके लिए आपको UITabbarController के अंदर एक uinabigation कॉंट्रोलर लोड करना होगा। यहा जांचिये। developer.apple.com/library/ios/documentation/UserExperience/…
एंड्रिया

11

Apple ने टेक्निकल Q & A QA1797 जारी किया : अपने दृश्यों को कवर करने से स्टेटस बार को रोकना । यह iOS 6 और iOS 7 संस्करणों के लिए ठीक काम करता है।


5
Apple मान रहा है कि हर कोई ऑटो-लेआउट का उपयोग कर रहा है। ऑटो-लेआउट Xcode 4 में भयानक था, और Xcode 5 केवल जारी किया गया था, इसलिए यह एक संदिग्ध धारणा है।
ग्लेन मेनार्ड

1
लेकिन संभावना है कि यह एक बेहतर समाधान है, फिर रूट विंडो या स्टेटस बार के फ्रेम का आकार बदलें।
इगोर

जहाँ तक मैं बता सकता हूँ, अगर आपके rootViewController एक विभाजन दृश्यकारकंट्रोलर है, तो Apple का समाधान काम नहीं करता है।
वर्न जेन्सेन

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 पिक्सल वाले सेल्फ व्यू पर सभी बच्चों के विचार बदल देता हूं। बस इतना ही। फिर, स्क्रीनशॉट उसी तरह प्रदर्शित होगा जैसे iOS 6 ने किया था। मुझे iOS7 स्टेटस बार से नफरत है! ~ "~


2
मुझे इसे कहाँ जोड़ना चाहिए? अनुप्रयोग प्रतिनिधि में विकल्पों के साथ लॉन्च किया था?
मुहम्मदशकी

जब मैं ऐसा करता हूं, तो मेरा स्टेटस बार सफेद हो जाता है
रोपो

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


क्या आपके पास presentViewController की समस्या है: एनिमेटेड: पूर्ण:?
Tùng Đỗ

@ TùngĐỗ सच है, तो मैं एक विकल्प बना दिया है कि काम करता है बेहतर: stackoverflow.com/questions/18294872/...
कोयूर

5

मैंने अपने सभी दृश्य नियंत्रकों में इसका उपयोग किया है, यह सरल है। अपने सभी दृश्य में इस पंक्ति को जोड़ें

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

    [super viewDidLoad];
}

1
एक आकर्षण, और मृत आसान की तरह काम किया। रूबी मोशन में, सुपर यूज़ करने के लिए कॉल करने से पहले: self.edgesForExtendedLayout = UIRectEdgeNone, अगर RespondsToSelector ("किनारों फ़ोरफ़्रंटेड लेयआउट")
तेहप्रोसेसर

4

इस सरल विधि का प्रयास करें ...।

चरण 1 : एकल में बदलने के लिएviewController

[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackOpaque];

चरण 2 : पूरे आवेदन में परिवर्तन करने के लिए

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

चरण 3 : इसके viewWillAppearलिए statusbarऊँचाई समायोजित करने के लिए प्रत्येक में इसे जोड़ेंiOS7

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

इंटरफ़ेस बिल्डर में एक विकल्प है जो iOS 6/7 डेल्टा संपत्ति को कॉल करता है जिसका उद्देश्य ऑफसेट समस्या को हल करना है।

स्टैक ओवरफ्लो प्रश्न इंटरफ़ेस बिल्डर में इस पर एक नज़र डालें : UIView के लेआउट iOS 6/7 डेल्टास के लिए क्या हैं?


3

मैंने iOS 7 में iOS 6 की तरह स्टेटस बार हासिल किया है।

सेट करें UIViewControllerBasedStatusBarAppearance में NO. info.plist

इस कोड को - (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 पिक्सेल तक नीचे ले जा सकता है। इस -(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"];

एक बेहतर तरीका यह है कि आप अपने UINavigationBar heightको 44 के बजाय 64 के बराबर कर दें। फिर आपका बार Apple के एप्स की तरह ही शीर्ष पर पहुंच जाएगा।
आरोन ब्रेजर

@AaronBrager लेकिन iOS 6 स्टाइल स्टेटस बार दिखाने के लिए मेरी आवश्यकता थी।
डेजर्ट रोज

आप लैंडस्केप ओरिएंटेशन iOS 7 के लिए समाधान जोड़ सकते हैं? मैं वही काम कर रहा हूं। लेकिन यह iOS 7 लैंडस्केप में काम नहीं कर रहा है।
सथ्यमूर्ति

@DesertRose THX! यह मेरे लिए काम करता है लेकिन यह सबसे नीचे यूटैबर को काट देता है। मेरे पास 3 विचारों के साथ एक टैब बार नियंत्रक आधारित ऐप है, जिनमें से 2 टेबलव्यूकंट्रोलर हैं।
marciokoko

1
UNTIL I डिवाइस को घुमाता है (मेरा iOS 7 डिवाइस एक iPad है), यह इसे पूरी तरह से ठीक करता है। लेकिन एक बार जब मैं घुमाता हूं, तो काली पट्टी बिल्कुल वही रहती है जहां वह है और "दृश्य" (क्षमा करें यदि वह गलत तकनीकी शब्द है, तो मैं एक फोनगैप / वेब लड़का हूं) अपनी सिकुड़ी हुई ऊंचाई को बनाए रखता है - सिवाय इसके कि यह ऊंचाई नहीं है, यह है चौड़ाई। यह समाधान रोटेशन का समर्थन नहीं करता है, लेकिन मैंने देखा है यह सबसे अच्छा फिक्स है - इसे डिवाइस के घुमाव के लिए कैसे देखा जा सकता है? धन्यवाद!
tylerl

2

यदि आप इंटरफ़ेस बिल्डर का उपयोग कर रहे हैं, तो यह कोशिश करें:

आपकी xib फ़ाइल में:

1) मुख्य दृश्य का चयन करें, पृष्ठभूमि रंग को काले रंग में सेट करें (या आप जिस भी रंग की स्थिति पट्टी चाहते हैं

2) सुनिश्चित करें कि पृष्ठभूमि नियंत्रक के दृश्य के एक शीर्ष स्तर के बच्चे के रूप में तैनात एक स्व निहित सबव्यू है।
नियंत्रक की दृष्टि के प्रत्यक्ष बच्चे बनने के लिए अपनी पृष्ठभूमि को स्थानांतरित करें। यह सुनिश्चित करने के लिए कि आप सभी फ़्रेम किनारों को लॉक कर चुके हैं, दोनों लचीले अक्षों को सक्रिय किया है, और यदि यह एक UIImageView है, तो ऑटोसाइजिंग पैनल की जाँच करें, सामग्री मोड को स्केल को भरने के लिए सेट करें। प्रोग्रामेटिक रूप से यह कंटेंटमोड को UIViewContentModeScaleToFill पर सेट करता है और इसका ऑटो रिवाइजिंग मास्क टू सेट है (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)।

3) अब सब कुछ है कि ऊपर से नीचे 20 pts द्वारा बंद कर दिया है और एक iOS 6/7 डेल्टा Y से -20 सेट करें।
सभी शीर्ष स्तर के बच्चे जो ऑटोसाइजिंग पैनल में शीर्ष फ्रेम पर बंद हैं, उन्हें 20 प्रयास द्वारा नीचे ले जाना होगा और उनके iOS 6/7 डेल्टा Y को -20 पर सेट करना होगा। (Cmd उन सभी का चयन करें, और 20 बार तीर पर क्लिक करें - क्या कोई बेहतर तरीका है?)

4) उपरोक्त सभी मदों की iOS 6/7 डेल्टा ऊंचाई को समायोजित करें जिनकी लचीली ऊंचाई थी। आइटमों में से कोई भी जो फ्रेम के ऊपर और नीचे लॉक था और ऑटोसाइज़िंग पैनल में लचीली ऊँचाई सक्षम थी, उनके पास आईओएस 6/7 डेल्टा की ऊँचाई 20 पर सेट होनी चाहिए। इसमें ऊपर उल्लिखित पृष्ठभूमि दृश्य शामिल है। यह विरोधी सहज लग सकता है, लेकिन जिस क्रम में ये लागू होते हैं, उसके कारण यह आवश्यक है। फ़्रेम की ऊँचाई पहले (डिवाइस के आधार पर) सेट की जाती है, फिर डेल्टास लागू होते हैं, और अंत में ऑटोसाइजिंग मास्क बच्चे के सभी फ़्रेमों के ऑफसेट पदों के आधार पर लगाए जाते हैं - इसे थोड़ा समझें, यह समझ में आएगा।

5) अंत में, आइटम जो निचले फ्रेम में बंद थे, लेकिन शीर्ष फ्रेम को बिल्कुल भी डेल्टा की आवश्यकता नहीं है।

यह आपको iOS7 और iOS6 में समान स्टेटस बार देगा।

दूसरी ओर, यदि आप iOS6 संगतता को बनाए रखते हुए iOS7 स्टाइल चाहते हैं , तो पृष्ठभूमि दृश्य के लिए डेल्टा Y / डेल्टा ऊंचाई मान 0 पर सेट करें।

अधिक iOS7 माइग्रेशन जानकारी देखने के लिए पूरी पोस्ट पढ़ें: http://uncompiled.blogspot.com/2013/09/legacy-compatible-offsets-in-ios7.html


ऑटो लेआउट का उपयोग करते समय कोई
देरी नहीं

2

मेरा समाधान UIViewविंडो 7 के शीर्ष पर 20 अंकों की ऊंचाई के साथ जोड़ना था जब iOS 7 पर। तब मैंने "ठोस" स्थिति बार पृष्ठभूमि को दिखाने / छिपाने के लिए अपने AppDelegate वर्ग में एक विधि बनाई। इन 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

ऐसा करने का सबसे आसान तरीका एक पुराने SDK को आपके नवीनतम Xcode में इंस्टॉल करना है।

पुराने XK को नए Xcode में कैसे स्थापित करें?

  1. U, http://www.4sared.com/zip/NlPgsxz6/iPhoneOS61sdk.html से iOS 6.1 SDK प्राप्त कर सकता है या किसी पुराने Xcode को डाउनलोड कर अपनी सामग्री से SDK प्राप्त कर सकता है

  2. इस फ़ोल्डर को अनजिप और पेस्ट करें /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

  3. Xcode पुनः आरंभ करें।

  4. U अब आपके प्रोजेक्ट की बिल्ड सेटिंग्स पर एक पुराने SDK का चयन कर सकता है

आशा है कि यह आपकी मदद करता है। इसने मेरे लिए काम किया =)


मेरे लिए काम किया। धन्यवाद @marcelosalloum लेकिन अभी भी अपने ऐप के भविष्य के अपडेट के लिए iOS7 के पारदर्शी स्टेटस बार का समर्थन करने के लिए मेरे फोनगैप (uiwebview) ऐप के लिए वर्कअराउंड खोज रहा हूं। एक बार फिर धन्यवाद। ;)
हंसीवाद

@marcellosaloum, क्या आप सुनिश्चित हैं कि ऐप्पल ऐप द्वारा स्वीकार किया जाएगा? उन्होंने कहा कि XCode 4 के साथ संकलित किए गए ऐप्स अब स्वीकार नहीं किए जाएंगे ... क्योंकि तथ्य की बात का मतलब iOS 6 SDK है।
वेलेरियो

मेरा ऐप वास्तव में स्वीकार कर लिया गया था क्योंकि Xcode5 पुराने iOS एसडीके को संकलित कर सकता है। मुझे यकीन नहीं है कि अगर AppStore Xcode4 द्वारा निर्मित ऐप्स को अस्वीकार कर देगा, लेकिन (Xcode4! = IOS 6 SDK) जैसा आपने कहा।
मार्सेलोसॉलम

1 फरवरी के बाद था? उस दिन में Apple ने यह अनिवार्य कर दिया था।
वलेरियो

नहीं, पिछले साल उस कोड को अंतिम बार छुआ था, लोक। नहीं पता था कि Apple ने यह अनिवार्य कर दिया था (हालांकि यह जानकर खुशी नहीं हुई)। क्या आप कृपया वह लिंक यहाँ पोस्ट करेंगे जो ऐसा कहता है? चीयर्स
marcelosalloum

1

presentViewController:animated:completion:गड़बड़ का उपयोग कर के रूप मेंwindow.rootViewController.view , मुझे इस मुद्दे पर एक अलग दृष्टिकोण खोजना पड़ा। आखिरकार मुझे अपने रूटव्यूकंट्रोलर के UIView को कम करके मॉडल्स और घुमाव के साथ काम करना पड़ा।

@interface RootView : UIView

@end

।म

@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 एनिमेशन के लिए एक मजबूत समाधान है।


1

मुझे इस उत्तर के लिए देर हो गई है, लेकिन मैं सिर्फ वही करता हूं जो मैंने किया, जो मूल रूप से सबसे आसान समाधान है

सबसे पहले-> अपनी info.plistफ़ाइल पर जाएं और स्टेटस बार स्टाइल जोड़ें-> पारदर्शी ब्लैक स्टाइल (0.5 का अल्फा)

अब, यहाँ यह है:

इस कोड को अपने 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

मेरा बहुत ही सरल समाधान (यह मानते हुए कि आपके पास केवल ऊर्ध्वाधर अभिविन्यास समर्थित है) 7 से नीचे के iOS संस्करणों के लिए एप्लिकेशन विंडो को फिर से परिभाषित करने के लिए है, App प्रतिनिधि में किया।

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; स्क्रीनबाउंड के बाद बस .origin.y = 20;
अमित सी।

0

आप सभी एक साथ स्थिति पट्टी छिपा सकते हैं। तो आपका ऐप फुल-स्क्रीन हो जाएगा। मुझे लगता है कि आपको सबसे अच्छा मिलेगा।

UIStatusBarStyleNone या लक्ष्य सेटिंग में सेट करें।


2
UIStatusbarstylenone को निर्दिष्ट करने के लिए कहां
user4951

0

IOS 7 में स्टेटस बार छिपाने के लिए चरण:

1. अपने आवेदन info.plist फ़ाइल के लिए जाओ।

2.और सेट, देखें नियंत्रक-आधारित स्थिति बार उपस्थिति: बूलियन सं

आशा है कि मैंने स्टेटस बार का मामला सुलझा लिया है ....।


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

मैं यहाँ पाया iOS7 में इस नेविगेशन बार मुद्दे के लिए सबसे अच्छा विकल्प और समाधान है !!

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

इसने मेरा स्टेटस बार बैकग्राउंड ब्लैक, स्टेटस बार टेक्स्ट व्हाइट और नेविगेशन बार का कलर व्हाइट बनाया है।

iOS 9.3, XCode 7.3.1

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.