2014-10-03 14 views
16

मैं आईओएस 8.iOS 8 - रोटेशन स्थिति बार नियंत्रण

मेरे ऐप में स्थिति पट्टी के नए ऑटो छुपा के साथ मुसीबतों का एक बहुत हो रही है टॉगल के बाद पोर्ट्रेट मोड में भी गायब हो जाते हैं बनाता है, मुझे मिल गया है एक दृश्य जिसमें उपयोगकर्ता एक बार टैप करता है, नेविगेशन बार और स्टेटस बार गायब हो जाता है।

जब परिदृश्य में, स्थिति पट्टी से ही छुपाता है और यह मेरे लिए ठीक है। मुझे केवल पोर्ट्रेट मोड में इसकी आवश्यकता है।

लेकिन समस्या यह है कि जब डिवाइस परिदृश्य होता है और बार दिखाया जाता है, जब उपयोगकर्ता बार को टॉगल करने के लिए दो बार टैप करता है (इसलिए दिखा रहा है), और डिवाइस को पोर्ट्रेट मोड में बदल देता है, तो स्टेटस बार अभी भी छिपा हुआ है।

मूल रूप से मैं iOS 8 पर अपनी प्राकृतिक व्यवहार के साथ हस्तक्षेप के बिना ले जाएँ करने में सक्षम होने की जरूरत है, तो मैं परिदृश्य सारांश यह है:

  • उपयोगकर्ता tabBar और NavigationBar और स्थिति बार के साथ कहा दृश्य में प्रवेश करती है;
  • ध्यान में रखते हुए एक बार नल और सलाखों के गायब
  • उपयोगकर्ता डिवाइस घूमता है, स्थिति बार दिखाई नहीं दे - StatusBar अभी भी छिपा हुआ, ठीक है - ठीक है, मैं इस
  • उपयोगकर्ता फिर से टैप करता सलाखों दिखाना चाहते हैं।
  • उपयोगकर्ता परिदृश्य से चित्र को बदलता रहता है और ..
  • स्थिति बार अभी भी छिपा हुआ - नहीं ठीक है।

MRW>http://rack.2.mshcdn.com/media/ZgkyMDEzLzA2LzEzL2Y0L1B1Y2suODkyZGIuZ2lmCnAJdGh1bWIJMTIwMHg5NjAwPg/c6538ddb/a38/Puck.gif

मैं willRotate पर स्थिति बार को समायोजित करने की कोशिश की है, लेकिन मैं एक मेस जिसमें प्रस्थिति बार दृश्य होगा, जब यह नहीं होना चाहिए था बनाया है। कोड मैं उपयोग कर रहा हूँ:

- (BOOL)prefersStatusBarHidden 
{ 
    return statusBarHidden; 
} 

-(void)toggleBars:(UITapGestureRecognizer *)gesture{ 
    CATransition *animation = [CATransition animation]; 
    animation.type = kCATransitionFromBottom; 
    animation.subtype = kCATransitionFromTop; 
    animation.duration = .2f; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]]; 


    BOOL toggleNavigationBar = self.navigationController.navigationBarHidden; 
    [self.navigationController.navigationBar.layer addAnimation:animation forKey:nil]; 
    [self.navigationController setNavigationBarHidden:!toggleNavigationBar animated:YES]; 



    BOOL toggleTabHidden = self.tabBarController.tabBar.hidden; 
    if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]isKindOfClass:[NSNull class]]){ 
     if([(NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]boolValue]) 
     { 
      [self.tabBarController.tabBar.layer addAnimation:animation forKey:nil]; 
      [self.tabBarController setHideTabBar:!toggleTabHidden animated:YES]; 
     } 
    } 

    statusBarHidden = [UIApplication sharedApplication].statusBarHidden; 
    [[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation:UIStatusBarAnimationSlide]; 
    [self setNeedsStatusBarAppearanceUpdate]; 


    if (IS_IOS8){ 
     if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){ 
      if (statusBarHidden){ 
       [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
      } 
     } 
    } 

} 

मैं जो में एक ध्वज स्थापित करने के बारे में सोच रहा था जब स्थिति बार छिपा हुआ है जब परिदृश्य और सभी नियंत्रण में देखते हैं, रोटेशन पर यह स्थिति बार ट्रिगर करेगा। बिना सफलता के, जाहिर है ..

किसी भी मदद की अत्यधिक सराहना की।

उत्तर

26

क्या आप UIViewController- आधारित स्टेटस बार उपस्थिति का उपयोग कर रहे हैं? यदि आप prefersStatusBarHidden लागू करते हैं तो मुझे लगता है कि आप हैं।

अब,

[[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation: UIStatusBarAnimationSlide]; 

UIViewController आधारित स्थिति पट्टी उपस्थिति के साथ काम करने के लिए नहीं होता।

आपको prefersStatusBarHidden विधि से अलग मूल्य वापस करने की आवश्यकता है और उस मूल्य को बदलने के लिए setNeedsStatusBarAppearanceUpdate पर कॉल करें जो मूल्य बदल गया है।

तो स्थिति बार दृश्यता बदलने के लिए आप सिर्फ

@property (nonatomic, assign) BOOL hideStatusBar; 

- (BOOL)prefersStatusBarHidden 
{ 
    return self.hideStatusBar; 
} 

- (void)toggleBars:(UITapGestureRecognizer *)gesture 
{ 
    ... hide navbar and tabbar ... 

    self.hideStatusBar = ! self.hideStatusBar; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

करना चाहिए और बस हो गया!

+1

धन्यवाद अपने ViewController में जोड़ने के लिए की जरूरत के संस्करण! मुझे सही रास्ते पर रखा! मुझे केवल एक चीज यह देखने के लिए एक और बूल जोड़ना था कि अभिविन्यास को स्टेटस दिखाना चाहिए या नहीं। इसने एक जादू की तरह काम किया! – Phillip

+0

बस याद रखें कि यह केवल पुराने संस्करणों के लिए आईओएस 7 से काम करता है [[यूआईएप्लिकेशंस साझा एप्प्लिकेशंस] setStatusBarHidden ...] का उपयोग किया जाना चाहिए। मदद करने में खुशी! – hybridcattt

+0

सौभाग्य से मुझे केवल आईओएस 7 और उच्चतम का समर्थन करने की आवश्यकता है, तो यह ठीक है! एक बार फिर धन्यवाद। – Phillip

0
#pragma mark After and Before Oriantation Change Methods+Delegate 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 
} 

#pragma mark nav 

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
} 

यह लघु और आसान तरीका है।

6

यह मेरे लिए काम किया:

- (void)viewWillLayoutSubviews { 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 
} 
+2

मैंने सभी समाधानों की कोशिश की लेकिन यह मेरे लिए सबसे अच्छा है – Rikco

0

यह तेजी से है (3.0) कि prefersStatusBarHidden

override var prefersStatusBarHidden: Bool{ 
    return false 
} 

तुम बस इसके लिए

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