2012-10-07 16 views
9

मैंने स्टेटस बार फ्रेम परिवर्तनों के बारे में अधिसूचनाएं प्राप्त करने के लिए पंजीकृत किया है, लेकिन उन्हें कभी प्राप्त नहीं हुआ है।किसी भी अधिसूचना के बिना स्थिति बार फ्रेम परिवर्तन

यहाँ कैसे मैं अधिसूचना के लिए रजिस्टर है:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(appWillChangeStatusBarFrameNotification:) 
              name:UIApplicationWillChangeStatusBarFrameNotification 
              object:nil]; 

हमारे अनुप्रयोग में कुछ स्थानों में, हम बताते हैं/साथ स्थिति बार छुपाने:

[[UIApplication sharedApplication] setStatusBarHidden:maximize 
             withAnimation:UIStatusBarAnimationSlide]; 

लेकिन यह भी आकार बदल सकते हैं जब व्यक्तिगत हॉटस्पॉट सक्षम है या जब एक फोन कॉल में। क्या यह बदलते समय वास्तविक स्थिति बार फ्रेम प्राप्त करने का कोई तरीका है?

This question का तात्पर्य है कि कम से कम अभिविन्यास परिवर्तनों के लिए अधिसूचना एसडीके बग के कारण काम नहीं करती है। क्या यही कारण है? क्या कोई कामकाज है?

+0

हम्म ... मेरे लिए अभिविन्यास परिवर्तनों पर काम करता है लेकिन सेटस्टैटसबार के साथ नहीं। जब मैं सिम्युलेटर पर एक फोन कॉल अनुकरण करता हूं तो मुझे इसे कॉल किया जाता है। – rdelmar

उत्तर

6

मुझे पता है कि यह प्रश्न थोड़ी देर पहले पोस्ट किया गया था, लेकिन यह समस्या एक परेशान है! UIApplicationWillChangeStatusBarFrameNotification और UIApplicationDidChangeStatusBarFrameNotification सूचनाएं केवल उन्मुखीकरण परिवर्तन और इन-कॉल स्थिति बार ऊंचाई परिवर्तन के साथ आग लगती हैं।

मैंने इसे अपने स्वयं के सेटस्टैटसबर्ड श्रेणीबद्ध फ़ंक्शन लिखकर हल किया जो मैं सामान्य UIApplication फ़ंक्शन के बजाय उपयोग करता हूं। दुर्भाग्यवश (जैसा कि @progrmr ने बताया), क्योंकि स्टेटस बार ऊंचाई 20 पिक्सेल या 40 पिक्सेल हो सकती है (और हमें यह जानने का कोई अंदाज़ा नहीं है कि छुपा हुआ स्टेटस बार का फ्रेम बिना किसी अप्रतिबंध के होने तक बन जाएगा), हम केवल भरोसेमंद आग लग सकते हैं सही userInfo (UIApplicationDidChangeStatusBarFrameNotification) के साथ एक ही अधिसूचना। यहाँ मैं क्या किया है:

@implementation UIApplication (statusBar) 

- (void)setStatusBarHiddenWithNotification:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation 
{ 
    if (self.statusBarHidden == hidden) return; 

    [self setStatusBarHidden:hidden withAnimation:animation]; 
    [NSNotificationCenter.defaultCenter postNotificationName:UIApplicationDidChangeStatusBarFrameNotification 
                 object:nil 
                userInfo:@{UIApplicationStatusBarFrameUserInfoKey: [NSValue valueWithCGRect:self.statusBarFrame]}]; 
} 

@end 

यह थोड़ा hacky है, लेकिन मुझे यह पसंद है क्योंकि मैं दोनों को इन-कॉल स्थिति पट्टी फ्रेम परिवर्तन और मेरी मैनुअल setStatusBarHidden फ्रेम हुए परिवर्तनों पर ध्यान के लिए एक ही अधिसूचना पर्यवेक्षक उपयोग कर सकते हैं।

उम्मीद है कि यह किसी की मदद करेगा!

+0

यह मानता है कि स्टेटस बार 20 अंक ऊंचा है, आमतौर पर यह होता है, लेकिन कभी-कभी यह 40 होता है (जब फ़ोन कॉल में होता है, जब हॉटस्पॉट सक्रिय होता है, आदि), लेकिन यह एक अच्छा विचार है। – progrmr

+0

अच्छा बिंदु। मुझे नहीं पता था कि setStatusBarHidden वास्तव में इन-कॉल स्टेटस बार छुपाता है। मैंने सोचा कि यह केवल सामान्य स्थिति पट्टी छुपा है। खैर ... मुझे लगता है कि आप इस फ़ंक्शन को केवल UIApplicationDidChangeStatusBarFrameNotification अधिसूचना को आग लगाने के लिए संशोधित कर सकते हैं और userInfo में वास्तविक स्थिति बार ऊंचाई के साथ पास कर सकते हैं। –

+0

@progrmr मैंने यूआईपीप्लिकेशंस की स्थिति बारफ्रेम का उपयोग करने के लिए श्रेणी फ़ंक्शन को ठीक किया। दुर्भाग्यवश इसका मतलब यह है कि हम विश्वसनीय उपयोगकर्ता इन्फ्लो संलग्न के साथ UIAplplationWillChangeStatusBarFrameNotification अधिसूचना को विश्वसनीय रूप से आग नहीं लगा सकते हैं। –

संबंधित मुद्दे