2011-11-28 25 views
9

मेरे पास बैक बटन के साथ मेरे दृश्य के शीर्ष पर एक टूलबार है। मैं चाहता हूं कि जब दृश्य एनिमेटेड दिखाई देने के लिए बटन के स्पर्श के साथ छुपा टूलबार के साथ दृश्य दिखाई देता है।आईफोन: छुपाएं/टूलबार दिखा रहा है

- एडिट - मैं एक नेविगेशन नियंत्रक का उपयोग नहीं कर रहा हूं।

+2

'[self.navigationController setToolbarHidden: हाँ];' – Kjuly

+0

UIView एक संपत्ति [छिपा] (है http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/ UIView.html # // apple_ref/occ/inst/instp/UIView/छुपा) – beryllium

+0

मुझे यकीन नहीं है कि यह प्रश्न -1 क्यों मतदान किया गया था। मैंने इसे वापस वोट दिया क्योंकि मैं एक ही चीज़ की कोशिश कर रहा हूं जिसमें कोई नेविगेशन नियंत्रक नहीं है (हालांकि इस प्रश्न में उल्लेख किया जाना चाहिए।) –

उत्तर

7

नई जानकारी को देखते हुए - कोई UINavigationController यह है कि - चीजें अलग हैं। यहाँ मेरी कोड से प्रासंगिक बिट ...

नेविगेशन बार बनाएँ और अपने दृश्य के लिए इसे जोड़ने कर रहे हैं:

// Create the navigation bar 

self.navBar = [[UINavigationBar alloc] init]; 
[self.view addSubview:self.navBar]; 

इसे बाहर निर्धारित करना ..

- (CGRect)frameForOrientation:(UIInterfaceOrientation)theOrientation 
{ 
    UIScreen *screen = [UIScreen mainScreen]; 
    CGRect fullScreenRect = screen.bounds;  // always implicitly in Portrait orientation. 
    CGRect appFrame = screen.applicationFrame; 

    // Find status bar height by checking which dimension of the applicationFrame is narrower than screen bounds. 
    // Little bit ugly looking, but it'll still work even if they change the status bar height in future. 
    float statusBarHeight = MAX((fullScreenRect.size.width - appFrame.size.width), (fullScreenRect.size.height - appFrame.size.height)); 

    // Initially assume portrait orientation. 
    float width = fullScreenRect.size.width; 
    float height = fullScreenRect.size.height; 

    // Correct for orientation. 
    if (UIInterfaceOrientationIsLandscape(theOrientation)) { 
     width = fullScreenRect.size.height; 
     height = fullScreenRect.size.width; 
    } 

    // Account for status bar, which always subtracts from the height (since it's always at the top of the screen). 
    height -= statusBarHeight; 

    return CGRectMake(0, statusBarHeight, width, height); 
} 

- (CGSize)viewSizeForOrientation:(UIInterfaceOrientation)theOrientation 
{ 
    CGRect frame = [self frameForOrientation:theOrientation]; 
    return CGSizeMake(frame.size.width, frame.size.height); 
} 

- (void)layoutSubviewsForInterfaceOrientation:(UIInterfaceOrientation)theOrientation withAnimation:(BOOL)animate 
{ 
    CGSize fullSize = [self viewSizeForOrientation:theOrientation]; 
    float width = fullSize.width; 
    float height = fullSize.height; 

    CGRect newFrame = CGRectMake(0, 0, width, height); 
    SubViewController *controller; 
    UIView *theView; 

    // Place the navigation bar 

    CGRect navBarFrame = newFrame; 
    navBarFrame.size.height = NAVBARHEIGHT; 
    self.navBar.frame = navBarFrame; 
} 

करने के लिए एक समारोह बनाएं जो यह/इसे छिपाने:

- (void)showNavigationBar:(BOOL)show 
{ 
    if (show == YES && self.navBar.hidden == YES) { 

     // Move the frame out of sight 
     CGRect frame = self.navBar.frame; 
     frame.origin.y = -frame.size.height; 
     self.navBar.frame = frame; 

     // Display it nicely 
     self.navBar.hidden = NO; 
     frame.origin.y = 0.0; 
     [self.view bringSubviewToFront:self.navBar]; 

     [UIView animateWithDuration:0.3 
         animations:^(void) { 
          self.navBar.frame = frame; 
         } 
     ]; 
    } 
    else if (show == NO && self.navBar.hidden == NO) { 

     CGRect frame = self.navBar.frame; 

     // Display it nicely 
     frame.origin.y = -frame.size.height; 
     [self.view bringSubviewToFront:self.navBar]; 

     [UIView animateWithDuration:0.3 
         animations:^(void) { 
          self.navBar.frame = frame; 
         } 
         completion:^(BOOL finished) { 
          self.navBar.hidden = YES; 
         } 
     ]; 
    } 
} 

जहां

#define NAVBARHEIGHT 44 
11

से पहले दृश्य दिखाया गया है:

[self.navigationController setToolbarHidden:YES]; 

जब आप बटन दबाएँ:

[self.navigationController setToolbarHidden:NO]; 
+0

मैंने एक व्यू कंट्रोलर में टूलबार लगाया है, न कि नेविगेशन नियंत्रक में। क्या चीज काम करने का कोई तरीका है या क्या मैं निश्चित रूप से नेविगेशन कोटर्रोलर का उपयोग करूंगा? –

+0

मेरा दूसरा उत्तर देखें – tarmes

1

यहां कुछ टर्मों का कोड मोनो टच/सी # पर पोर्ट किया गया है।

public static RectangleF FrameForOrientation(UIInterfaceOrientation orientation) { 
     var screen = UIScreen.MainScreen; 
     var fullScreenRect = screen.Bounds;  // always implicitly in Portrait orientation. 
     var appFrame = screen.ApplicationFrame; 

     // Find status bar height by checking which dimension of the applicationFrame is narrower than screen bounds. 
     // Little bit ugly looking, but it'll still work even if they change the status bar height in future. 
     var statusBarHeight = Math.Max((fullScreenRect.Width - appFrame.Width), (fullScreenRect.Height- appFrame.Height)); 

     // Initially assume portrait orientation. 
     var width = fullScreenRect.Width; 
     var height = fullScreenRect.Height; 

     // Correct for orientation. 
     if (IsLandscapeOrientation(orientation)) { 
      width = fullScreenRect.Height; 
      height = fullScreenRect.Width; 
     } 

     // Account for status bar, which always subtracts from the height (since it's always at the top of the screen). 
     height -= statusBarHeight; 

     return new RectangleF(0, statusBarHeight, width, height); 
    } 

    public static SizeF SizeForOrientation(UIInterfaceOrientation orientation) { 
     var frame = FrameForOrientation(orientation); 
     return new SizeF(frame.Width, frame.Height); 
    } 


    public static bool IsLandscapeOrientation(UIInterfaceOrientation orientation) { 
     return 
      orientation == UIInterfaceOrientation.LandscapeLeft || 
      orientation == UIInterfaceOrientation.LandscapeRight; 
    } 
संबंधित मुद्दे