Ocultar la tabbar y quitar el espacio

¿Hay alguna forma de ocultar tabbar y eliminar ese espacio restante (alrededor de 50 px)?

Lo intenté

self.tabBarController?.tabBar.hidden = true self.extendedLayoutIncludesOpaqueBars = true 

Sin suerte. Veo espacio en blanco

Si todavía está viendo una franja negra debajo de la barra de tabs oculta, ¿ha intentado seleccionar Extender bordes debajo de Barras opacas aquí?

enter image description here

Asegúrese también de que aún se seleccionen las barras inferiores . ¡Espero eso ayude!

Swift 3 :

 extension UITabBarController { func setTabBarVisible(visible:Bool, duration: TimeInterval, animated:Bool) { if (tabBarIsVisible() == visible) { return } let frame = self.tabBar.frame let height = frame.size.height let offsetY = (visible ? -height : height) // animation UIViewPropertyAnimator(duration: duration, curve: .linear) { self.tabBar.frame.offsetBy(dx:0, dy:offsetY) self.view.frame = CGRect(x:0,y:0,width: self.view.frame.width, height: self.view.frame.height + offsetY) self.view.setNeedsDisplay() self.view.layoutIfNeeded() }.startAnimation() } func tabBarIsVisible() ->Bool { return self.tabBar.frame.origin.y < UIScreen.main.bounds.height } } 

Para usar (si, por ejemplo, self es un UITabBarController ):

 self.setTabBarVisible(visible: false, duration: 0.3, animated: true) 

Swift 2.x:

 extension UITabBarController { func setTabBarVisible(visible:Bool, duration: NSTimeInterval, animated:Bool) { if (tabBarIsVisible() == visible) { return } let frame = self.tabBar.frame let height = frame.size.height let offsetY = (visible ? -height : height) // animation UIView.animateWithDuration(animated ? duration : 0.0) { self.tabBar.frame = CGRectOffset(frame, 0, offsetY) self.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height + offsetY) self.view.setNeedsDisplay() self.view.layoutIfNeeded() } } func tabBarIsVisible() ->Bool { return self.tabBar.frame.origin.y < UIScreen.mainScreen().bounds.height } } 

Usar:

 self.tabBarController?.setTabBarVisible(visible: false, duration: 0.3, animated: true) 

Después de ver tu captura de pantalla en el comentario. Creo que puedes intentar establecer hidesBottomBarWhenPushed a true.

 hidesBottomBarWhenPushed = true 

O guión gráfico.

enter image description here

Ocultará la barra inferior automáticamente cuando presionó a otro controlador de vista, y aparecerá de nuevo cuando regrese.

La tercera respuesta sobre esta pregunta me funciona de la siguiente manera:

El código en mi controlador de vista

 @IBAction func buttonPressed(sender: AnyObject) { setTabBarVisible(!tabBarIsVisible(), animated: true) } func setTabBarVisible(visible: Bool, animated: Bool) { // hide tab bar let frame = self.tabBarController?.tabBar.frame let height = frame?.size.height var offsetY = (visible ? -height! : height) print ("offsetY = \(offsetY)") // zero duration means no animation let duration:NSTimeInterval = (animated ? 0.3 : 0.0) // animate tabBar if frame != nil { UIView.animateWithDuration(duration) { self.tabBarController?.tabBar.frame = CGRectOffset(frame!, 0, offsetY!) self.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height + offsetY!) self.view.setNeedsDisplay() self.view.layoutIfNeeded() return } } } func tabBarIsVisible() -> Bool { return self.tabBarController?.tabBar.frame.origin.y < UIScreen.mainScreen().bounds.height } 

En el guión gráfico:

El color de fondo de la vista principal del controlador de vista es de color negro: enter image description here

Luego, podría tener otra vista adentro (color de fondo blanco), trailing limitado y espacio líder a superview y espacio superior e inferior a la guía de diseño.

enter image description here

Y el resultado es:

enter image description here

Sí. Puede ocultar su barra de tabs cuando pulsa para ver el controlador. Puede mostrar la barra de tabs en su hogar. Puedes ocultar tu barra de tabs cuando presionas el siguiente controlador de vista.

Consulte Ocultar barra de botones en la siguiente imagen de inserción y configure en todos los controles de visualización donde no desee la barra de tabs.

enter image description here

Espero eso ayude..

Mi forma preferida de hacerlo es usar un controlador de envoltura. Si quiero ocultar la barra de tabs, solo aumento la altura del controlador de la barra de tabs, por lo tanto, efectivamente, la barra de tabs se mueve fuera de la pantalla.

Con esta solución, no necesita hackear el marco de la barra de tabs y no depende de la animación de inserción del controlador de navegación:

 import UIKit class ViewController: UIViewController { let tabController: UITabBarController = { let tabController = UITabBarController() // setup your tabbar controller here return tabController; }() var tabbarHidden = false { didSet { var frame = self.view.bounds; if (tabbarHidden) { frame.size.height += self.tabController.tabBar.bounds.size.height; } self.tabController.view.frame = frame; } } override func viewDidLoad() { super.viewDidLoad() // add the tab controller as child controller addChildViewController(self.tabController) self.tabController.view.frame = self.view.bounds self.tabController.view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] self.view.addSubview(self.tabController.view) self.tabController.didMoveToParentViewController(self) // for debugging let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(switchTabbar)) self.tabController.view.addGestureRecognizer(tapRecognizer) } override func childViewControllerForStatusBarStyle() -> UIViewController? { return self.tabController } override func childViewControllerForStatusBarHidden() -> UIViewController? { return self.tabController } func switchTabbar() { UIView.animateWithDuration(0.3) { self.tabbarHidden = !self.tabbarHidden } } } 

enter image description here

NOTA – Esta solución es simplemente para eliminar el espacio en blanco que queda después de ocultar la barra de tabs.

Para ocultar la mejor solución de barra de tabs es – @Michael Campsall responder aquí

La solución más simple para esto es cambiar las restricciones de fondo de tu vista (en mi caso es tableView), en lugar de dar restricciones de fondo con BottomLayoutGuide dale con supervista. Capturas de pantalla adjuntas para referencia.

Las restricciones que se muestran en las capturas de pantalla siguientes crean el problema, cámbielo de acuerdo con la siguiente captura de pantalla.

Cambie las restricciones que se muestran en esta captura de pantalla de acuerdo con la captura de pantalla siguiente

Las restricciones reales para eliminar el espacio en blanco deben estar de acuerdo con esta captura de pantalla (a continuación).

enter image description here

Programáticamente, agregue esto al próximo controlador de vista para swift 4.

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) tabBarController?.tabBar.isHidden = true edgesForExtendedLayout = UIRectEdge.bottom extendedLayoutIncludesOpaqueBars = true } 

Y agrega un color de fondo

Para aquellos a los que les gusta hacer todo de forma programática, agregue esta línea al método init de un ViewController que no debería tener el tabBar:

 hidesBottomBarWhenPushed = true 

A veces, la forma más fácil es simplemente agregar una vista que use los límites de UIScreen.

 let whiteView = UIView() whiteView.backgroundColor = .white view.addSubview(whiteView) whiteView.translatesAutoresizingMaskIntoConstraints = false whiteView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true whiteView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true whiteView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true whiteView.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.height).isActive = true 

A veces, los bordes de la vista se extienden más allá de la barra de navegación, lo que le genera nuevos problemas si amplía el diseño de la vista.

Este código funciona en iOS 10, 11 y iPhone X (incluidos los simuladores) para mostrar / ocultar el tabBar . Lo creé varios años (¿marco de tiempo de iOS 7?) Y ha funcionado de manera confiable desde ese momento.

Funciona muy bien en iPhone X siempre y cuando el contenido contenido en su hijoViewControllers (en tabs) esté fijado en topLayoutGuide , bottomLayoutGuide o SafeArea y no en las paredes de vistas principales. Entonces todo solo funciona. ¡Disfrutar!

 @interface UITabBarController (HideTabBar) @property (nonatomic, getter=isTabBarHidden) BOOL tabBarHidden; -(void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated; @end @implementation UITabBarController (HideTabBar) -(BOOL)isTabBarHidden { CGRect viewFrame = self.view.frame; CGRect tabBarFrame = self.tabBar.frame; return tabBarFrame.origin.y >= viewFrame.size.height; } -(void)setTabBarHidden:(BOOL)hidden { [self setTabBarHidden:hidden animated:NO]; } -(void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated { BOOL isHidden = self.tabBarHidden; if(hidden == isHidden)return; UIView *transitionView = [[[self.view.subviews reverseObjectEnumerator] allObjects] lastObject]; if(transitionView == nil) { NSLog(@"UITabBarCategory can't get the container view"); return; } CGRect viewFrame = self.view.bounds; CGRect tabBarFrame = self.tabBar.frame; CGRect containerFrame = transitionView.frame; CGRect selectedVCFrame = containerFrame; tabBarFrame.origin.y = viewFrame.size.height - (hidden ? 0 : tabBarFrame.size.height); containerFrame.size.height = viewFrame.size.height - (hidden ? 0 : tabBarFrame.size.height); if([self.moreNavigationController.viewControllers containsObject:self.selectedViewController]) { selectedVCFrame = self.selectedViewController.view.frame; selectedVCFrame.size.height += hidden ? tabBarFrame.size.height : -tabBarFrame.size.height; } self.selectedViewController.view.frame = selectedVCFrame; [UIView animateWithDuration:.5 animations:^{ self.tabBar.frame = tabBarFrame; transitionView.frame = containerFrame; [self.selectedViewController.view setNeedsLayout]; }]; } @end 

Uso : lo llamo viewController en los eventos de rotación, así:

 -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; // Hide TabBar on iPhone, iPod Touch if([UIDevice currentDevice].userInterfaceIdiom != UIUserInterfaceIdiomPad) { if(_startDateEditor.editing) return; if(fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || fromInterfaceOrientation == UIInterfaceOrientationPortrait) [self.tabBarController setTabBarHidden:YES animated:YES]; else [self.tabBarController setTabBarHidden:NO animated:YES]; } }