Posicionamiento de UITabBar en la parte superior

Soy un principiante en el desarrollo de iOS. Mi pregunta es: ¿es posible posicionar a UITabBar en la parte superior y cómo? No puedo ubicar mi UITabBar en la parte superior de la vista.

¿Es posible? Claro, pero viola las pautas de la interfaz humana.

Capturas de pantalla:

RetratoPaisajeGuión gráfico

Código:

TabController.h:

#import <UIKit/UIKit.h> @interface TabController : UITabBarController <UITabBarControllerDelegate> @end 

TabController.m:

 #import "TabController.h" @interface TabController () @end @implementation TabController - (void)viewDidLoad { [super viewDidLoad]; self.delegate = self; } - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; [self.tabBar invalidateIntrinsicContentSize]; CGFloat tabSize = 44.0; UIInterfaceOrientation orientation = [UIApplication shanetworkingApplication].statusBarOrientation; if (UIInterfaceOrientationIsLandscape(orientation)) { tabSize = 32.0; } CGRect tabFrame = self.tabBar.frame; tabFrame.size.height = tabSize; tabFrame.origin.y = self.view.frame.origin.y; self.tabBar.frame = tabFrame; // Set the translucent property to NO then back to YES to // force the UITabBar to reblur, otherwise part of the // new frame will be completely transparent if we rotate // from a landscape orientation to a portrait orientation. self.tabBar.translucent = NO; self.tabBar.translucent = YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end 

Swift3: logro esto creando una class personalizada para UITabBarController :

 class CustomTabBarController: UITabBarController { @IBOutlet weak var financialTabBar: UITabBar! override func viewDidLoad() { super.viewDidLoad() // I've added this line to viewDidLoad UIApplication.shanetworking.statusBarFrame.size.height financialTabBar.frame = CGRect(x: 0, y: financialTabBar.frame.size.height, width: financialTabBar.frame.size.width, height: financialTabBar.frame.size.height) } 

No olvide configurar su class personalizada en TabBarController introduzca la descripción de la imagen aquí

El resultado sería así:

introduzca la descripción de la imagen aquí

Aquí hay un ejemplo rápido de trabajo 3 del código de aviatorken89.

  1. Primero crea un file nuevo.
  2. Seleccione la class de toque de cocoa fuente.
  3. Designe la subclass de: UITabBarController
  4. Nombra la class "CustomTabBarController" o lo que quieras.
  5. Agregue el siguiente código a la class.

     override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() var tabFrame:CGRect = self.tabBar.frame tabFrame.origin.y = self.view.frame.origin.y self.tabBar.frame = tabFrame } 
  6. Si está utilizando storyboard, asegúrese de cambiar la class de barra de tabs a su class personalizada a través del "Inspector de identidad".

Puede crear una barra de tabs personalizada haciéndola usted mismo, pero Apple desalienta altamente la imitación de un control del sistema para una function que originalmente no tenía la intención de hacer.

Una vez más, le desanimo que lo haga, porque viola la consistencia de su aplicación y las aplicaciones del sistema. Pero desde que estoy aquí, aquí vamos:

Para una barra de tabs personalizada, debe crear una vista que contenga varios botones. También necesita una vista de contenedor debajo de UITabBar (porque desea que UITabBar esté en la parte superior). Cuando se presiona un button, cambia el UIViewController dentro del contenedor.
Es bastante simple, pero, por supuesto, no es muy recomendable.

Si desea algo así como un UITabBar en la parte superior, ¿qué tal si crea una UIView personalizada y agregue cualquier número de UIButtons en ella. Luego vincule a algunos ViewControllers con cada button a través de Segue. ¡Hecho!

No necesita personalizar el UITabBar. Como aviatorken89 dijo anteriormente, está en contra de la guía de interfaz humana.