tab guidelines bar iphone height uinavigationbar

guidelines - iPhone-¿Cómo se configura la altura de uinavigationbar?



tab bar ios (9)

Aquí hay una subclase bastante buena en Swift que puedes configurar en Storyboard. Se basa en el trabajo realizado por mackross, que es genial, pero fue anterior a iOS7 y dará como resultado que su barra de navegación no se extienda bajo la barra de estado.

class UINaviationBarCustomHeight: UINavigationBar { // Note: this must be set before the navigation controller is drawn (before sizeThatFits is called), // so set in IB or viewDidLoad of the navigation controller @IBInspectable var barHeight: CGFloat = -1 @IBInspectable var barHeightPad: CGFloat = -1 override func sizeThatFits(size: CGSize) -> CGSize { var customSize = super.sizeThatFits(size) let stockHeight = customSize.height if (UIDevice().userInterfaceIdiom == .Pad && barHeightPad > 0) { customSize.height = barHeightPad } else if (barHeight > 0) { customSize.height = barHeight } // re-center everything transform = CGAffineTransformMakeTranslation(0, (stockHeight - customSize.height) / 2) resetBackgroundImageFrame() return customSize } override func setBackgroundImage(backgroundImage: UIImage?, forBarPosition barPosition: UIBarPosition, barMetrics: UIBarMetrics) { super.setBackgroundImage(backgroundImage, forBarPosition: barPosition, barMetrics: barMetrics) resetBackgroundImageFrame() } private func resetBackgroundImageFrame() { if let bg = valueForKey("backgroundView") as? UIView { var frame = bg.frame frame.origin.y = -transform.ty if (barPosition == .TopAttached) { frame.origin.y -= UIApplication.sharedApplication().statusBarFrame.height } bg.frame = frame } } }

Quiero hacer que la parte superior de la vista de navegación sea un poco más pequeña. ¿Cómo lograrías esto? Esto es lo que he intentado hasta ahora, pero como puede ver, aunque reduzco la barra de navegación, el área que solía ocupar sigue allí (en negro).

[window addSubview:[navigationController view]]; navigationController.view.frame = CGRectMake(0, 100, 320, 280); navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 20); navigationController.view.backgroundColor = [UIColor blackColor]; [window makeKeyAndVisible];


Cree una categoría UINavigationBar con un tamaño personalizadoThatFits.

@implementation UINavigationBar (customNav) - (CGSize)sizeThatFits:(CGSize)size { CGSize newSize = CGSizeMake(self.frame.size.width,70); return newSize; } @end


He encontrado el siguiente código para un mejor rendimiento en iPad (y iPhone):

- (CGSize)sizeThatFits:(CGSize)size { return CGSizeMake(self.superview.bounds.size.width, 62.0f); }


No es necesario subclasificar el UINavigationBar. En Objective-C puede usar una categoría y en Swift puede usar una extensión.

extension UINavigationBar { public override func sizeThatFits(size: CGSize) -> CGSize { return CGSize(width: frame.width, height: 70) } }


Para veloz

crea una subclase de la barra de Uinavigation.

import UIKit class higherNavBar: UINavigationBar { override func sizeThatFits(size: CGSize) -> CGSize { var newSize:CGSize = CGSizeMake(self.frame.size.width, 87) return newSize }

Habrá dos franjas en blanco en ambos lados, cambié el ancho al número exacto para que funcione.

Sin embargo, el título y el botón Atrás están alineados en la parte inferior.


Pude usar el siguiente código de subclase en Swift. Utiliza la altura existente como punto de partida y la agrega.

A diferencia de las otras soluciones en esta página, parece que todavía cambia el tamaño correctamente al cambiar entre la orientación horizontal y vertical.

class TallBar: UINavigationBar { override func sizeThatFits(size: CGSize) -> CGSize { var size = super.sizeThatFits(size) size.height += 20 return size } }


Si desea usar una altura personalizada para su barra de navegación, creo que debería, como mínimo, usar una barra de navegación personalizada (no una en su controlador de navegación). Oculta la barra de NavController y agrega la tuya. Luego puedes configurar su altura para que sea lo que quieras.


Soy un novato en iOS aún. Resolví el problema de la siguiente manera:

  1. Creé una nueva clase que hereda de UINavigationBar

  2. Anulo el siguiente método:

    (void)setBounds:(CGRect)bounds { [super setBounds:bounds]; self.frame = CGRectMake(0, 0, 320, 54); }

3.Para obtener un fondo personalizado de la barra de navegación, anulé el siguiente método:

-(void)drawRect:(CGRect)rect { [super drawRect:rect]; UIImage *img = [UIImage imageNamed:@"header.png"]; [img drawInRect:CGRectMake(0,0, self.frame.size.width, self.frame.size.height)]; }

  1. En el archivo xib, he cambiado la clase predeterminada UINavigationBar de la barra de navegación a mi clase.

Usando esta subclase de la barra de navegación, creé exitosamente una barra de navegación más grande en iOS 5.x a iOS 6.x en el iPad. Esto me da una barra de navegación más grande pero no rompe todas las animaciones.

static CGFloat const CustomNavigationBarHeight = 62; static CGFloat const NavigationBarHeight = 44; static CGFloat const CustomNavigationBarHeightDelta = CustomNavigationBarHeight - NavigationBarHeight; @implementation HINavigationBar - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // UIColor *titleColor = [[HITheme currentTheme] fontColorForLabelForLocation:HIThemeLabelNavigationTitle]; // UIFont *titleFont = [[HITheme currentTheme] fontForLabelForLocation:HIThemeLabelNavigationTitle]; // [self setTitleTextAttributes:@{ UITextAttributeFont : titleFont, UITextAttributeTextColor : titleColor }]; CGAffineTransform translate = CGAffineTransformMakeTranslation(0, -CustomNavigationBarHeightDelta / 2.0); self.transform = translate; [self resetBackgroundImageFrame]; } return self; } - (void)resetBackgroundImageFrame { for (UIView *view in self.subviews) { if ([NSStringFromClass([view class]) rangeOfString:@"BarBackground"].length != 0) { view.frame = CGRectMake(0, CustomNavigationBarHeightDelta / 2.0, self.bounds.size.width, self.bounds.size.height); } } } - (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics { [super setBackgroundImage:backgroundImage forBarMetrics:barMetrics]; [self resetBackgroundImageFrame]; } - (CGSize)sizeThatFits:(CGSize)size { size.width = self.frame.size.width; size.height = CustomNavigationBarHeight; return size; } - (void)setFrame:(CGRect)frame { [super setFrame:frame]; [self resetBackgroundImageFrame]; } @end