ios - item - uitabbarcontroller programmatically swift 4
Cambiar la altura de la barra de UITab (15)
Utilizo UITabBarController
como una vista de raíz y la aplicación es compatible con iOS 6 y superior. La jerarquía de clases del proyecto es la siguiente.
UITabBarController
- tab1
- UINavigationController
- UIViewController
- UIViewController
.
.
- tab2
- UINavigationController
- UIViewController
- UIViewController
.
.
.
- tab3
- UIViewController
- tab4
- UIViewController
UITabBar
código de abajo para cambiar la altura de UITabBar
en uno de los UIViewControllers (que está dentro de UINavigationController
) en la jerarquía anterior.
CGRect tabbarFrame = self.tabBarController.tabBar.frame;
tabbarFrame.size.height += 60;
self.tabBarController.tabBar.frame = tabbarFrame;
Pero no está cambiando la altura. UITabBar
se muestra con la altura predeterminada. Aunque el registro de su valor imprime el valor cambiado como se muestra a continuación.
<UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>>
¿Cómo puedo cambiar la altura de UITabBar
para lograr algo como esto?
Construyendo en respuestas anteriores y actualizando para Swift 3.
Subclase UITabController y asegúrate de asignar tu nueva clase personalizada al Identity Inspector de tu UITabController.
Swift 3.0
class MainTabBarController: UITabBarController {
override func viewWillLayoutSubviews() {
var newTabBarFrame = tabBar.frame
let newTabBarHeight: CGFloat = 60
newTabBarFrame.size.height = newTabBarHeight
newTabBarFrame.origin.y = self.view.frame.size.height - newTabBarHeight
tabBar.frame = newTabBarFrame
}
}
Advertencia : si obtiene un espacio en blanco debajo de la barra de pestañas, asegúrese de haber puesto este código en viewWillLayoutSubviews () y no viewDidLoad ().
Cree una subclase personalizada de tipo UITabBar
, luego implemente el siguiente método:
@implementation CustomTabBar
#define kTabBarHeight = // Input the height we want to set for Tabbar here
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = kTabBarHeight;
return sizeThatFits;
}
@end
Espero que esto funcione.
Implementación de Xamarin:
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
const float newTabBarHeight = 40f;
TabBar.Frame = new CGRect(TabBar.Frame.X, TabBar.Frame.Y + (TabBar.Frame.Height - newTabBarHeight), TabBar.Frame.Width, newTabBarHeight);
}
La altura de la barra de pestañas es una constante establecida por Apple, por lo que no puedes cambiarla.
Me enfrenté a este problema y pude resolverlo.
UITabBarController
agregar el siguiente código a su subclase de la clase UITabBarController
.
const CGFloat kBarHeight = 80;
- (void)viewWillLayoutSubviews {
CGRect tabFrame = self.tabBar.frame; //self.TabBar is IBOutlet of your TabBar
tabFrame.size.height = kBarHeight;
tabFrame.origin.y = self.view.frame.size.height - kBarHeight;
self.tabBar.frame = tabFrame;
}
Para iOS 8.2 , Xcode 6.2 Swift idioma:
Cree un "DNMainTabVC.swift" (archivo DeveloperNameMainTabViewController.swift) para su UITabBarController
(de tipo UITabBarController
) y conéctelo a su VC de guión gráfico.
Añade las siguientes líneas:
override func viewWillLayoutSubviews() {
var tabFrame = self.tabBar.frame
// - 40 is editable , the default value is 49 px, below lowers the tabbar and above increases the tab bar size
tabFrame.size.height = 40
tabFrame.origin.y = self.view.frame.size.height - 40
self.tabBar.frame = tabFrame
}
Esto funcionó para mí.
Por alguna razón, la respuesta de @Rushikesh funcionó bastante bien hasta iOS 10, pero tuve algunos problemas con iOS 11 y Swift 3.2 .
La barra de tabulación cambiaba su marco cada vez que tocaba una nueva pestaña.
viewDidLayoutSubviews()
esto al poner el código en la función viewDidLayoutSubviews()
lugar de viewWillLayoutSubviews()
Swift 3:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var tabFrame = tabBar.frame
tabFrame.size.height = 65
tabFrame.origin.y = view.frame.size.height - 65
tabBar.frame = tabFrame
}
Probado en XCode 9.0 y Swift 4
Como se sugirió en las respuestas anteriores, herede UITabBar
y reemplaza a sizeThatFits
, pero marca el height
como @IBInspectable
, para que pueda configurarse en el Creador de interfaces :
import UIKit
class CustomTabBar : UITabBar {
@IBInspectable var height: CGFloat = 0.0
override func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
if height > 0.0 {
sizeThatFits.height = height
}
return sizeThatFits
}
}
Establezca la clase CustomTabBar
para la UITabBar
en el Inspector de identidad (⌥⌘3):
Luego, establezca la Height
deseada (mayor que 0.0
) en el inspector de atributos (4):
Puedes modificar la altura de la barra de pestañas subclasificándola. En realidad lo hice hace mucho tiempo. xcode 6.0
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: super.sizeThatFits(size).width, height: 60)
}
Eso debería devolver su ancho por defecto con la altura de 60pts.
esta es también una manera de hacer eso
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 71
return sizeThatFits
} }
iPhoneX tiene una altura diferente, por lo que si nos movemos a una altura menor, la forma de la barra de pestañas será mala en iPhoneX
- (void)viewWillLayoutSubviews
{
int requiredHeight = 55;
CGRect tabFrame = self.tabBar.frame;
if (tabFrame.size.height < requiredHeight)
{
tabFrame.size.height = requiredHeight;
tabFrame.origin.y = self.view.frame.size.height - requiredHeight;
self.tabBar.frame = tabFrame;
}
}
Para Swift 4
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 60 // adjust your size here
return sizeThatFits
}
}
Swift 2.0:
var tabBar:UITabBar?
override func viewWillLayoutSubviews() {
var tabFrame: CGRect = self.tabBar!.frame
tabFrame.size.height = 60
tabFrame.origin.y = self.view.frame.size.height - 60
self.tabBar!.frame = tabFrame
}
Swift 3.0+ Reemplace 200 a su altura deseada en el siguiente código.
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 200)
}
}
Swift3.0, Swift 4.0 compatible
Altura de la barra de pestañas predeterminada de Pre-iPhone X : 49 puntos
Altura predeterminada de la barra de pestañas del iPhone X : 83 puntos
Una solución universal compatible con todos los dispositivos iOS, incluido el tamaño de pantalla del iPhone X , tendría este aspecto:
Capture la altura por defecto de UITabBar:
fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }()
Ajustar la altura de UITabBar:
override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() let newTabBarHeight = defaultTabBarHeight + 16.0 var newFrame = tabBar.frame newFrame.size.height = newTabBarHeight newFrame.origin.y = view.frame.size.height - newTabBarHeight tabBar.frame = newFrame }