xcode swift ios8 navbar

iOS 8 Swift Xcode 6-Establecer barra de navegación superior bg color y altura



ios8 navbar (3)

He buscado en todas partes y probado todos los fragmentos de código publicados en Stack, pero nada funciona para mí, ya que necesito que funcione.

Simplemente quiero establecer:

  • Altura de la barra de navegación
  • Barra de navegación bg color en RGB
  • Logotipo centrado en la barra de navegación

Estoy trabajando con iOS8, Xcode 6 y Swift.

Muchas gracias por una respuesta clara!

Este es mi código en ViewController.swift

// Set nav bar height navigationController?.navigationBar.frame.origin.y = -10 // Set nav bar bg color var navBarColor = UIColor(red: 4 / 255, green: 47 / 255, blue: 66 / 255, alpha: 1) navigationController?.navigationBar.barTintColor = navBarColor // Set nav bar logo let navBarImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30)) navBarImageView.contentMode = .ScaleAspectFit let navBarImage = UIImage(named: "navBarLogo.png") navBarImageView.image = navBarImage navigationItem.titleView = navBarImageView


Altura de la barra de navegación:

En una subclase de controlador de navegación personalizada ...

El truco con este es NO cambiar la altura real de la barra de navegación y ajustar su origen.

func viewDidLoad() { super.viewDidLoad() navigationBar.frame.origin.y = -10 }

Barra de navegación bg color en RGB:

En una subclase de controlador de navegación personalizada ...

func viewDidLoad() { super.viewDidLoad() navigationBar.barTintColor = // YOUR COLOR }

o use el proxy de apariencia

UINavigationBar.appearance().barTintColor = // YOUR COLOR

Logotipo centrado en la barra de navegación

En un controlador de vista personalizada ...

func viewDidLoad() { super.viewDidLoad() navigationItem.titleView = UIImageView(image: // YOUR LOGO) }


¡Gran respuesta de Bon Bon !

En Swift 3, sin embargo, asegúrese de reemplazar

let classNamesToReposition: [String] = ["_UINavigationBarBackground"]

con

let classNamesToReposition: [ String ] = [ "_UIBarBackground" ]

De lo contrario, no funcionará.


Después de aplicar el código en la respuesta aceptada, la altura no parece cambiar en absoluto.

No es un trabajo fácil ... y he encuestado varios artículos en línea (la mayoría de ellos en Objective-C).

El más útil es este: http://www.emdentec.com/blog/2014/2/25/hacking-uinavigationbar

Pero su solución final no coloca los artículos en el medio, y no está en Swift.

Así que se me ocurrió una versión viable en Swift . Espero que ayude a algunas personas, ya que me salvó mucho tiempo precioso en SO.

Solución en Swift:

El siguiente código resolverá algunos problemas que puede haber encontrado:

  • El título y los elementos no se colocan en el medio de la barra de navegación
  • El título y los elementos se moverían cuando el usuario navega entre los controladores de vista

Primero debe subclasificar el UINavigationBar y, en el guión gráfico, seleccionar el elemento de la barra de navegación y, en la pestaña "Inspector de identidad" , configurar la nueva clase como clase personalizada.

import UIKit class UINavigationBarTaller: UINavigationBar { ///The height you want your navigation bar to be of static let navigationBarHeight: CGFloat = 64 ///The difference between new height and default height static let heightIncrease:CGFloat = navigationBarHeight - 44 override init(frame: CGRect) { super.init(frame: frame) initialize() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initialize() } private func initialize() { let shift = UINavigationBarTaller.heightIncrease/2 ///Transform all view to shift upward for [shift] point self.transform = CGAffineTransformMakeTranslation(0, -shift) } override func layoutSubviews() { super.layoutSubviews() let shift = UINavigationBarTaller.heightIncrease/2 ///Move the background down for [shift] point let classNamesToReposition: [String] = ["_UINavigationBarBackground"] for view: UIView in self.subviews { if classNamesToReposition.contains(NSStringFromClass(view.dynamicType)) { let bounds: CGRect = self.bounds var frame: CGRect = view.frame frame.origin.y = bounds.origin.y + shift - 20.0 frame.size.height = bounds.size.height + 20.0 view.frame = frame } } } override func sizeThatFits(size: CGSize) -> CGSize { let amendedSize:CGSize = super.sizeThatFits(size) let newSize:CGSize = CGSizeMake(amendedSize.width, UINavigationBarTaller.navigationBarHeight); return newSize; } }

También en mi esencia: https://gist.github.com/pai911/8fa123d4068b61ad0ff7

Actualización iOS 10:

Lamentablemente, este código se rompe en iOS 10, hay alguien que ayuda a solucionarlo, aquí tienes:

Altura de la barra de navegación personalizada iOS 10

Y, para que quede claro, este código es bastante hacky ya que depende de la estructura interna de la barra de navegación ... por lo que si decides usarlo de todos modos, prepárate para cualquier cambio que pueda romper este código ...