web-dev-qa-db-de.com

presentViewController und Navigationsleiste anzeigen

Ich habe eine View-Controller-Hierarchie und der oberste Controller wird als Modal angezeigt und möchte wissen, wie die Navigationsleiste bei der Verwendung angezeigt wird

'UIViewController:presentViewController:viewControllerToPresent:animated:completion'

Die Dokumentation zu 'presentViewController: animated: completion:'

'Auf dem iPhone und dem iPod touch wird die angezeigte Ansicht immer im Vollbildmodus angezeigt. Auf dem iPad hängt die Präsentation vom Wert in der modalPresentationStyle-Eigenschaft ab. '

Für 'modalPresentationStyle' heißt es in den Dokumenten:

Der Präsentationsstil bestimmt, wie ein modal präsentierter Ansichts-Controller auf dem Bildschirm angezeigt wird. Auf dem iPhone und dem iPod touch werden modale Ansichtssteuerungen immer im Vollbildmodus angezeigt, auf dem iPad gibt es jedoch mehrere verschiedene Darstellungsoptionen.

Kann sichergestellt werden, dass die Navigationsleiste unterhalb der Statusleiste angezeigt wird, sobald das Ansichtssteuerelement angezeigt wird? Sollte ich das Dokument so interpretieren, dass Sie keine Optionen für iPhone/iPod und nur für iPad erhalten?

Bisher habe ich 'UIViewController:presentModalViewController:animated' was gut funktioniert hat, aber seit iOS 5.0 ist die API veraltet, so dass ich auf die neue umsteige.

Visuell möchte ich, dass der neue Controller wie die alte API unten im Bildschirm eingeblendet wird.

[Aktualisierung mit Code]:

// My root level view:
UIViewController *vc = [[RootViewController alloc] 
                            initWithNibName:nil 
                            bundle:[NSBundle mainBundle]];
navController = [[UINavigationController alloc] initWithRootViewController:vc];        
....

// Within the RootViewController, Second view controller is created and added 
// to the hierarchy. It is this view controller that is responsible for 
// displaying the DetailView:
SecondTierViewController *t2controller = [[SecondTierViewController alloc] 
                                           initWithNibName:nil
                                           bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:t2controller animated:YES];

// Created by SecondTierViewController 
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

[self.navigationController presentViewController:controller 
                                        animated:YES 
                                        completion:nil];
84
Jonas Gardner

Wenn Sie einen View Controller modal auf dem iPhone präsentieren, wird er immer im Vollbildmodus angezeigt, unabhängig davon, wie Sie ihn auf dem Top View Controller eines Navigationscontrollers oder auf andere Weise präsentieren. Sie können die Navigationsleiste jedoch jederzeit wie folgt anzeigen:

Anstatt diesen Ansichtscontroller modal darzustellen, stellen Sie einen Navigationscontroller modal dar, wobei sein Stammansichtscontroller als der gewünschte Ansichtscontroller festgelegt ist:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *navigationController = 
    [[UINavigationController alloc] initWithRootViewController:myViewController];

//now present this navigation controller modally 
[self presentViewController:navigationController
                   animated:YES
                   completion:^{

                        }];

Sie sollten eine Navigationsleiste sehen, wenn Ihre Ansicht modal dargestellt wird.

184
Manish Ahuja

Swift 5.*

Navigation:

guard let myVC = self.storyboard?.instantiateViewController(withIdentifier: "MyViewController") else { return }
let navController = UINavigationController(rootViewController: myVC)

self.navigationController?.present(navController, animated: true, completion: nil)

Zurück:

self.dismiss(animated: true, completion: nil)

Swift 2.

Navigation:

let myVC = self.storyboard?.instantiateViewControllerWithIdentifier("MyViewController");
let navController = UINavigationController(rootViewController: myVC!)

self.navigationController?.presentViewController(navController, animated: true, completion: nil)

Zurück:

self.dismissViewControllerAnimated(true, completion: nil)
36
Tal Zion

Kannst du --- benutzen:

[self.navigationController pushViewController:controller animated:YES];

Zurückgehen (denke ich):

[self.navigationController popToRootViewControllerAnimated:YES];
23
marrop

Ich hatte das gleiche Problem auf iOS7. Ich habe es in Selector aufgerufen und es funktionierte auf ios7 und ios8.

[self performSelector: @selector(showMainView) withObject: nil afterDelay: 0.0];

- (void) showMainView {
    HomeViewController * homeview = [
        [HomeViewController alloc] initWithNibName: @
        "HomeViewController"
        bundle: nil];
    UINavigationController * navcont = [
        [UINavigationController alloc] initWithRootViewController: homeview];
    navcont.navigationBar.tintColor = [UIColor whiteColor];
    navcont.navigationBar.barTintColor = App_Theme_Color;
    [navcont.navigationBar
    setTitleTextAttributes: @ {
        NSForegroundColorAttributeName: [UIColor whiteColor]
    }];
    navcont.modalPresentationStyle = UIModalPresentationFullScreen;
    navcont.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self.navigationController presentViewController: navcont animated: YES completion: ^ {

    }];
}
2
Mohammad Parvez

Schnell 3

        let vc0 : ViewController1 = ViewController1()
        let vc2: NavigationController1 = NavigationController1(rootViewController: vc0)
        self.present(vc2, animated: true, completion: nil)
1
BennyTheNerd

Alle a [self.navigationController pushViewController:controller animated:YES]; does animiert einen Übergang und fügt ihn dem Navigationscontroller-Stapel und einigen anderen coolen Animationselementen für die Navigationsleiste hinzu. Wenn Sie sich nicht für die Balkenanimation interessieren, funktioniert dieser Code sollte. Die Leiste erscheint auf dem neuen Controller und Sie erhalten eine interaktive Pop-Geste!

//Make Controller
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                    bundle:[NSBundle mainBundle]];  
//Customize presentation
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

//Present controller
[self presentViewController:controller 
                   animated:YES 
                 completion:nil];
//Add to navigation Controller
[self navigationController].viewControllers = [[self navigationController].viewControllers arrayByAddingObject:controller];
//You can't just [[self navigationController].viewControllers addObject:controller] because viewControllers are for some reason not a mutable array.

Bearbeiten: Sorry, presentViewController wird den ganzen Bildschirm ausfüllen. Sie müssen einen benutzerdefinierten Übergang mit CGAffineTransform.translation oder etwas anderem vornehmen, den Controller mit dem Übergang animieren und ihn dann den viewControllern des navigationControllers hinzufügen.

1
Ignat

Ich benutze diesen Code. Es funktioniert gut in iOS 8.

MyProfileEditViewController *myprofileEdit=[self.storyboard instantiateViewControllerWithIdentifier:@"myprofileeditSid"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myprofileEdit];
[self presentViewController:navigationController animated:YES completion:^{}];
0
Anil Prasad

Swift-Version: Dies ist ein ViewController, der in einen Navigationscontroller eingebettet ist.

    override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    //  Identify the bundle by means of a class in that bundle.
    let storyboard = UIStoryboard(name: "Storyboard", bundle: NSBundle(forClass: SettingsViewController.self))

    // Instance of ViewController that is in the storyboard.
    let settingViewController = storyboard.instantiateViewControllerWithIdentifier("SettingsVC")

    let navController = UINavigationController(rootViewController: settingViewController)

    presentViewController(navController, animated: true, completion: nil)

}
0
ioopl

Wenn Sie NavigationController in Swift 2.x verwenden

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let targetViewController = storyboard.instantiateViewControllerWithIdentifier("targetViewControllerID") as? TargetViewController
self.navigationController?.pushViewController(targetViewController!, animated: true)
0
Ego Slayer

versuche dies

     let transition: CATransition = CATransition()
    let timeFunc : CAMediaTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.duration = 1
    transition.timingFunction = timeFunc
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromRight
    self.view.window!.layer.addAnimation(transition, forKey: kCATransition)
    self.presentViewController(vc, animated:true, completion:nil)
0
tsinghan

Wenn Sie die Eigenschaft modalPresentationStyle nicht festgelegt haben (wie bei UIModalPresentationFormSheet), wird die Navigationsleiste immer angezeigt. Um sicherzustellen, immer tun

[[self.navigationController topViewController] presentViewController:vieController 
                                                            animated:YES 
                                                          completion:nil];

Dadurch wird die Navigationsleiste immer angezeigt.

0
rakeshNS

Eine Lösung

DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
navController.modalPresentationStyle = UIModalPresentationCurrentContext;



[self.navigationController presentViewController:navController 
                                        animated:YES 
                                        completion:nil];
0
Yatin Sarbalia