kit - iOS 8: botón ocultar ocultar UINavigationController
webkit view swift 4 (11)
Después de ejecutar mi aplicación en iOS 8 (XCode 6.0.1, iPhone 6), el botón Atrás no se oculta.
Mi código:
- (void)removeCategoriesButton
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[_navigationController.topViewController.navigationItem setHidesBackButton:YES];
[_navigationController.topViewController.navigationItem setLeftBarButtonItem:nil];
} else {
UIViewController *controller = _app.window.rootViewController;
if ([controller isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)controller;
[nav.topViewController.navigationItem setHidesBackButton:YES];
[nav.topViewController.navigationItem setLeftBarButtonItem:nil];
}
}
}
Pero el botón Atrás no se oculta (ver captura de pantalla):
UPD:
Ejecuto la aplicación en otros simuladores, y veo este "error" solo en iOS 8.
¿Dónde has escrito ese código?
Debería ser tan simple como en el controlador de vista loadView / viewDidLoad: método que agrega esto
[self.navigationItem setHidesBackButton:YES];
Esto funciona para mí en un iPhone 6
Descubrí que esto se debía al empujar una nueva vista en viewWillAppear, si lo movía a viewDidAppear, entonces el botón Atrás no se mostraba. Es extraño que este problema solo apareciera en iOS8.
Este error solo ocurre cuando usas Storyboard. Otra solución es agregar un UIBarButtonItem con un título vacío para "falsificarlo".
Esto funcionó para mí.
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationItem setHidesBackButton:YES];
[self.navigationItem setTitle:@"Home"];
}
La única forma que he encontrado para hacer esto es ocultar la barra de navegación y agregar una barra de navegación en el guión gráfico y volver a mostrar la barra de navegación en el siguiente ViewController. Todo lo que tenía que hacer es agregar una etiqueta en la barra de estado para que la barra de navegación sea uniforme. No he encontrado otra manera ...
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
para que la barra de navegación se muestre en el siguiente controlador de vista, declare en:
- (void)viewWillDisappear:(BOOL)animated
{
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
Llame a su ViewDidLoad el siguiente método:
C objetivo:
self.navigationItem.leftBarButtonItem = nil;
o
self.navigationItem.hidesBackButton = YES;
Rápido:
navigationItem.hidesBackButton = true
Ocultar el botón Atrás utilizando setHidesBackButton solo funciona si no ha personalizado el botón.
En la referencia del método: "Especifique verdadero si el botón Atrás debe estar oculto cuando este elemento de navegación es el elemento superior. Especifique falso si el botón Atrás debe estar visible, asumiendo que no ha sido reemplazado por un elemento personalizado". (Note la última línea)
La solución simple en ese caso es establecer primero leftBarButtonItem en nil.
Swift 3.0:
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.setHidesBackButton(true, animated: false)
Probé muchas de las respuestas, pero la única que funcionó para mí fue:
override func viewDidLoad() {
super.viewDidLoad()
let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton
}
Prueba esto:
[self.navigationItem setHidesBackButton:YES];
for (UIView *view in self.navigationController.navigationBar.subviews)
{
NSString *name = [NSString stringWithFormat:@"%@",view.class];
if ([name isEqualToString:@"UINavigationItemButtonView"] || [name isEqualToString:@"_UINavigationBarBackIndicatorView"]) {
[view setHidden:YES];
}
}
Rápido:
self.navigationItem.hidesBackButton = true
Trate de usar self.navigationItem.hidesBackButton = true
en el método viewWillAppear()
, esto funcionó para mí.