bar ios uinavigationcontroller storyboard uinavigationbar

ios - Cómo agregar una barra de navegación a una vista sin el controlador de navegación



add button to navigation bar swift 4 (3)

Hola a todos En mi aplicación, tengo un menú lateral que se desliza para mostrar una vista de tabla y desde allí tengo segues que usan el controlador de vista reveladora. El segue tiene que conectarse directamente al controlador de visualización, de lo contrario, la aplicación se bloquea, por lo que no puedo usar un controlador de navegación. Mi pregunta es cómo puedo agregar una barra de navegación con un elemento de botón de barra sin un controlador de navegación. He hecho todos mis diseños en el story board.


Si bien hay varias formas inteligentes de responder a su pregunta. Acabo de resolverlo programáticamente y escribí el siguiente código en mi vista viewWillAppear (note - viewDidLoad también está bien, pero no se sugiere) -

-(void) viewWillAppear:(BOOL)animated { UINavigationBar *myNav = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; [UINavigationBar appearance].barTintColor = [UIColor lightGrayColor]; [self.view addSubview:myNav]; UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:nil]; UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:nil]; UINavigationItem *navigItem = [[UINavigationItem alloc] initWithTitle:@"Navigation Title"]; navigItem.rightBarButtonItem = doneItem; navigItem.leftBarButtonItem = cancelItem; myNav.items = [NSArray arrayWithObjects: navigItem,nil]; [UIBarButtonItem appearance].tintColor = [UIColor blueColor]; }

Por lo tanto, tiene una barra de navegación blanca con elementos de botón de barra azul sin un controlador de navegación. Una vez más, hay otras formas de implementarlo en su caso. Espero, esto fue útil.

Salida -

Actualización -

Para agregar imágenes -

UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,10,32,32)]; [myImage setImage:[UIImage imageNamed:@"image.png"]]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myImage]; [self.view addSubview:myImage];


Hay una forma de usar NavigationItem en el constructor de interfaces para esto.

Primero agregue un elemento de NavigationItem a su ViewController en el constructor de interfaz, como lo haría con un NavigationController . Asegúrese de hacer que NavigationBar sea ​​visible seleccionando algo que no sea Inferred y None en métricas simuladas .

Segundo, en viewDidLoad , solo agrega las siguientes líneas:

- (void)viewDidLoad { [super viewDidLoad]; UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame]; bar.items = @[self.navigationItem]; [self.view addSubview: bar]; }

En cuanto al frame , el width será el mismo que su ViewController y la height será 44.0 o 64.0 dependiendo de si la status bar es visible o no .

CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height; CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, navigationBarHeight);

Y si desea soportar diferentes orientaciones, use NSLayoutConstraints :

CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height; [self.view addConstraints: @[ [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: bar attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: navigationBarHeight], ]];


Versión Swift 4

let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) navigationBar.barTintColor = UIColor.lightGray view.addSubview(navigationBar) let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: nil) let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: nil) let navigationItem = UINavigationItem(title: "Title") navigationItem.rightBarButtonItem = cancelButton navigationItem.leftBarButtonItem = doneButton navigationBar.items = [navigationItem]