Presenting a Modal View Controller hides the Navigation Bar

后端 未结 9 931
灰色年华
灰色年华 2021-01-04 00:58

I have a navigation based app with a navigation bar, but there are a few instances where instead of pushing a view controller onto the stack, I need to present the view cont

相关标签:
9条回答
  • 2021-01-04 01:13
    AddContactVC *addController =[self.storyboard instantiateViewControllerWithIdentifier:@"AddContactVC"];
    UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:addController];
    [self presentViewController:navigationController animated:YES completion: nil];
    

    working for me shows navigation bar

    0 讨论(0)
  • 2021-01-04 01:19

    If you present a controller as model, View controller will appear to total view.

    If you want to access the navigation controller properties over the model view, You need to create another navigation controller reference and it continues as previous.

    This may be useful for you.

    0 讨论(0)
  • 2021-01-04 01:26

    Emphatic and Devin –

    As I started reading through the Apple docs to get familiar with the problem, I noticed that the method you're using, presentModalViewController:animated:, appears to be deprecated in favor of presentViewController:animated:completion:. Perhaps you should try to use that method instead.

    For your convenience, take a look for yourself:

    presentModalViewController:animated: reference

    I'll try to put together a quick test program to see whether what I've said above is actually true. But give it a shot – maybe it'll help!

    0 讨论(0)
  • 2021-01-04 01:27

    One of the best solution it to use this Category MaryPopin https://github.com/Backelite/MaryPopin

    0 讨论(0)
  • 2021-01-04 01:30

    Check this out. This is Apple's Documentation under UIViewController Class Reference:

    It clearly mentions that modal view always presents in full screen mode, so it is obvious that navigation bar will be hidden. So put the seperate navigation bar on modal view to navigate back.

    presentModalViewController:animated:
    Presents a modal view managed by the given view controller to the user.
    
    - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
    Parameters
    modalViewController
    The view controller that manages the modal view.
    animated
    If YES, animates the view as it’s presented; otherwise, does not.
    Discussion
    On iPhone and iPod touch devices, the view of modalViewController is always presented full screen. On iPad, the presentation depends on the value in the modalPresentationStyle property.
    
    Sets the modalViewController property to the specified view controller. Resizes its view and attaches it to the view hierarchy. The view is animated according to the transition style specified in the modalTransitionStyle property of the controller in the modalViewController parameter.
    
    Availability
    Available in iOS 2.0 and later.
    

    Hope this helps you understand that hiding the whole view along with navigation controller is default behaviour for modal view so try putting a seperate navigation bar in modal view to navigate.

    You can check it further on this link

    http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

    0 讨论(0)
  • 2021-01-04 01:30

    Xcode has a template that does pretty close to what you're doing. from the results, i don't think you should be attempting to perform [self.navigationController presentModalViewController:vc] and [self.navigationController dismissModalViewControllerAnimated:] , but rather simply [self presentModalViewController:] and [self dismissModalViewControllerAnimated:] .

    to see how the template does this for yourself, you can use the new project wizard in xcode 4.3 . perhaps it will provide some guidance:

    Xcode new project wizard utility template

    from that choice, choose Next, then give your test project a name, choose "Universal", turn off automatic reference counting, hit next, save where you want it.

    now, click on the target and switch the deployment target to 4.3 (or 4.0 if you prefer) for your testing purposes, and switch to your device or the iOS 4.3 simulator .

    finally, substitute the following code in applicationDidFinishLaunching:withOptions: in the created AppDelegate.m:

        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            self.mainViewController = [[[MainViewController alloc] initWithNibName:@"MainViewController_iPhone"
                                                                            bundle:nil] autorelease];
        } else {
            self.mainViewController = [[[MainViewController alloc] initWithNibName:@"MainViewController_iPad"
                                                                            bundle:nil] autorelease];
        }
        UINavigationController* navigationController
          = [[UINavigationController alloc] initWithRootViewController:self.mainViewController];
        self.window.rootViewController = navigationController;
        [self.window makeKeyAndVisible];
        return YES;
    

    now, when i run this, it doesn't hide the navigationBar. and in the created MainViewController.m from the template, you'll see how it presents the modal view controller and dismisses it from the controller itself and not from the navigation controller. for good measure, to make the template code more like your own, go into MainViewController.m and delete the line that sets the modal view controller transition style ...

    (of course, in iOS 5, with storyboards, the same thing can all be accomplished with modal segues ... which is how i've done this for apps that i'm not supporting for pre-5.0 that present a modalViewController in this fashion.)

    0 讨论(0)
提交回复
热议问题