2011-03-08 30 views
10

को शामिल किया गया setStatusBarHidden:NO से पहले दृश्य लोड सेट किया जाता है, UINavigationBar और अन्य तत्वों तुरंत StatusBar नीचे जितना वे गठबंधन दिखाई देते हैं। हालांकि, setStatusBarHidden:NO दृश्य लोड के बाद सेट किया गया है, UINavigationBar आंशिक रूप से कवर किया गया है।setStatusBarHidden: NO XIB लोड के बाद UINavigationBar

स्टेटसबार को उस दृश्य को लोड करने के बाद प्रकट किया जाना चाहिए, लेकिन उपर्युक्त समस्या का सामना किए बिना यह कैसे किया जा सकता है?

+0

के लिए मैं प्यार होता है और साथ ही इस का जवाब जानने के लिए। –

उत्तर

16

मुझे अपने कोड में एक हैक मिला, हालांकि याद नहीं किया जा सकता है या यह कहां से आया था।

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

मेरी कोड में समारोह इस तरह दिखता है: चाल छुपा है और यह reshowing द्वारा नेविगेशन पट्टी ताज़ा करने के लिए है

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

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

    [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    [self.navigationController setNavigationBarHidden:NO animated:NO]; 
} 
हालांकि

, चेतावनी, यह एक हैक है , और वर्तमान में मैं कुछ बग्स के साथ संघर्ष कर रहा हूं जो इस कोड से उत्पन्न होते हैं (नेविगेशन आइटम नेविगेशन सामग्री से मेल नहीं खाता है)। लेकिन चूंकि उसने कुछ स्थानों पर मेरे लिए काम किया था, मैंने सोचा था कि मैं इसका जिक्र करूंगा।

संपादित करें: मुझे लगता है कि मैं यहाँ आरंभिक पोस्ट पाया: How do I get the navigation bar in a UINavigationController to update its position when the status bar is hidden?

जीएल, Oded

+0

यह काम करने के लिए प्रयुक्त होता था, लेकिन ऐसा लगता है कि यह आईओएस 5 पर नहीं है। :( – davehayden

1

मेरा अनुमान है कि स्टेटस बार दिखाए जाने से पहले एनएवी बार लोड किया जा रहा है, इसलिए एनएवी बार की स्थिति (0,0) है जो बाद में स्टेटस बार (0,0) पर ओवरलैप होती है। setStatusBarHidden:NO पर कॉल करने के बाद, आप केवल viewDidLoad में नेविगेशन बार (या एनीमेशन ब्लॉक सेट अप) के फ्रेम को स्थानांतरित कर सकते हैं। navigationBar.frame = CGRectMake(0,20,320,44); स्टेटस बार 320x20 है, इसलिए बस इसके नेविगेशन बार को 20 तक नीचे ले जाना इसके लिए प्रयास करना चाहिए।

0

यहाँ है कि मैं क्या iOS 5 में अब मेरी जड़ नियंत्रक में कर रहा हूँ के बाद मैं बता बदले में स्टेटस बार। बदसूरत, लेकिन ऐसा लगता है।

CGRect rect; 

if (self.interfaceOrientation == UIInterfaceOrientationPortrait) 
    rect = CGRectMake(0, 20, 320, 460); 
else if (self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    rect = CGRectMake(0, 0, 320, 460); 
else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    rect = CGRectMake(20, 0, 300, 480); 
else 
    rect = CGRectMake(0, 0, 300, 480); 

[UIView animateWithDuration:0.35 animations:^{ self.view.frame = rect; }]; 
2

(मुझे पता है यह एक पुराने सवाल था, लेकिन मैं सिर्फ आधे घंटे बिताए सफलता के बिना जवाब अपने आप को खोजने की कोशिश कर, तो मैं मैं इसे यहाँ किसी और को जो अटक जाते हैं के लिए पोस्ट होगा सोचा ... विशेष रूप से यदि आप स्थिति पट्टी को दिखाने के लिए कोशिश कर रहे हैं और आपके विचार यह अतिव्यापी)

अप समाप्त हो रहा है मैंने पाया यह काम करता है अगर आप स्थिति पट्टी छुपाना चाहते हैं ...

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 
[self.view setFrame: [[UIScreen mainScreen] bounds]]; 

लेकिन जब आप करना चाहते हैं स्टेटस बार दिखाएं ... उस मामले में मैं इस समाधान का उपयोग करता हूं wh आईआईसी काम करता है, लेकिन मुझे चिंतित करता है क्योंकि यह स्टेटस बार की ऊंचाई 20 तक मुश्किल कोड करता है ... यह मुझे भी चिंतित करता है कि मुझे अभिविन्यास के आधार पर दृश्य को अलग-अलग समायोजित करना होगा। लेकिन अगर मैंने ऐसा नहीं किया तो यह हमेशा गलत किनारे पर 20 बिंदु अंतर था। मेरे मामले में मैं कुछ दृश्यों के लिए स्टेटस बार बंद करना चाहता हूं, और फिर वापस लौटने पर वापस चालू करना चाहता हूं। अगर बार बंद था, तो मैंने डिवाइस को घुमाया तो मुझे विशेष समस्याएं थीं। तो स्विच स्टेटमेंट, हालांकि बदसूरत (कोई क्लीनर समाधान पोस्ट कर सकता है), काम करता है।

[[UIApplication sharedApplication] setStatusBarHidden:NO]; 

CGRect frame = [[UIScreen mainScreen] bounds]; 

switch (self.interfaceOrientation) 
{ 
    case UIInterfaceOrientationPortrait: 
     frame.origin.y = 20; 
     frame.size.height -= 20; 
     break; 

    case UIInterfaceOrientationPortraitUpsideDown: 
     frame.origin.y = 0; 
     frame.size.height -= 20; 
     break; 

    case UIInterfaceOrientationLandscapeLeft: 
     frame.origin.x = 20; 
     frame.size.width -= 20; 
     break; 

    case UIInterfaceOrientationLandscapeRight: 
     frame.origin.x = 0; 
     frame.size.width -= 20; 
     break; 

} 

[self.view setFrame:frame]; 
1

आप इस समस्या हो रही है, क्योंकि आप स्थिति पट्टी, जबकि अपनी Default.png लोड कर रहा है प्रदर्शित नहीं कर रहे हैं, और फिर अपना पहला दृश्य नियंत्रक बार देखने पर यह तुरंत स्थिति पट्टी प्रदर्शित करना चाहते हैं, बस सुनिश्चित करें कि आप से पहले [[UIApplication sharedApplication] setStatusBarHidden:NO]; डाल कर आपके AppDelegate.m में [self.window makeKeyAndVisible];। यह बहुत तेज़ होता है, आप स्प्लैश स्क्रीन पर स्टेटस बार कभी नहीं देख पाएंगे।

[[UIApplication sharedApplication] setStatusBarHidden:NO]; 
[self.window makeKeyAndVisible]; 
+0

यह मेरे लिए काम करता है, बस सुनिश्चित करें कि सेट स्थिति बार्हेड: साथ एनीमेशन: ऐपडिलेगेट में [self.window makeKeyAndVisiable] से पहले विधि डाली गई है। –

0

iOS 7 में आप का उपयोग कर सकते हैं:

[self.mainViewController.navigationController setNeedsStatusBarAppearanceUpdate]; 

सेब डॉक्स:

कॉल इस विधि अगर दृश्य नियंत्रक की स्थिति पट्टी गुण

setNeedsStatusBarAppearanceUpdate 
उदाहरण के लिए

, छुपा/अप्रयुक्त स्थिति ओ के रूप में आर शैली, परिवर्तन। यदि आप एनीमेशन ब्लॉक के भीतर को इस विधि को कॉल करते हैं, तो शेष एनीमेशन ब्लॉक के साथ परिवर्तन एनिमेटेड होते हैं।

उपयोग यह केवल iOS 7.