fondo color cambiar ios swift uinavigationbar uibarbuttonitem

ios - color - ionic sass



Aumentar la altura de la barra de navegaciĆ³n (2)

Tengo el siguiente código:

func navbarbutton() { UIView.animateWithDuration(0.2, animations: { () -> Void in let current = self.navigationController?.navigationBar.frame self.navigationController?.navigationBar.frame = CGRectMake(self.frame!.origin.x, self.frame!.origin.y, self.frame!.size.width, current!.size.height + 50) self.navigationController?.navigationBar.layoutIfNeeded() }) }

Puedo aumentar la altura de la barra de navegación en 50 dp. Ese no es el problema para mí. El problema que estoy teniendo es que los UIBarButtonItems están todos alineados en la parte inferior. ¿Cómo puedo alinearlos para que yo pueda agregar más al fondo? Obtengo algo según la imagen:

¿Es posible alinearlo con la parte superior?


Lamentablemente no puedes hacer eso.

La jerarquía de vistas dentro de UINavigationBar es privada, por lo que no puede manipularla sin iterar sobre las subvistas y volverse loco con ella. Esta probablemente no es una buena idea.

Por curiosidad, miré la aplicación Mensajes en iOS 10 usando el depurador de vista porque obviamente hacen esto. De hecho, logran el diseño agregando su propio UIButton para reemplazar el Back y RightBarButtonItem. Esto es algo que podría hacer sin embargo, también establece el alfa de una de las vistas de contenido interno (y privado) a cero para que el contenido original ya no sea visible.
Esto es algo que no podrás hacer tan desafortunadamente. Podría tratar de piratear las cosas hasta que funcionen, pero recuerde que también debe manejar las pulsaciones / saltos, en las barras de estado de las llamadas, las transiciones interactivas y los eventos de rotación.

Sin embargo, si no buscaba el estilo de iMessage y solo quería agregar algo de contenido debajo de su barra de navegación, ¿por qué no mira fijando un UIVisualEffectView en la topLayoutGuide en su UIViewController ? Puede obtener un aspecto bastante agradable con bastante facilidad y le ahorra mucho al piratear cosas. Aquí hay un ejemplo:


Prueba este código:

Nota: Código probado en Swift 3.

Respuesta 1: Respuesta actualizada

class ViewController: UIViewController { var customBar: UINavigationBar = UINavigationBar() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //Title title = "Some Title" // Add bar button item navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped)) navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped)) self.customBar.frame = CGRect(x:0, y:0, width:view.frame.width, height:(navigationController?.navigationBar.frame.height)! + 50) self.customBar.backgroundColor = UIColor.green self.view.addSubview(customBar) } func addTapped() { print("Button Pressed") }

Salida:

Respuesta 2:

override var isViewLoaded: Bool { // Add bar button item navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped)) navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped)) //Vertical and Horizonal barButtonItem position offset navigationItem.leftBarButtonItem?.setTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: 20), for: UIBarMetrics.default) navigationItem.rightBarButtonItem?.setTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: 20), for: UIBarMetrics.default) return true } func addTapped() { print("Button Pressed") }

Nota: El código anterior solo funciona en isViewLoaded: método Bool. Pero no tuve suerte. Cuando probé este código en otro método viewLoad.

Salida 1: barButtonItem movió 20 píxeles verticalmente.

Salida 2: barButtonItem se movió 20 píxeles verticalmente.

Espero, el código anterior arregla tu problema.