Quiero hacer un taller de la barra de navegación y estoy tratando de hacer esto usando una subclase de UINavigationBar.

Aquí está mi subclase de UINavigationBar:

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

Y en mi ViewController que está incrustado en un controlador de navegación, escribo el siguiente código en el viewDidLoad() función

self.navigationController!.setValue(TallerNaviBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 87)), forKeyPath: "navigationBar")

No hay ningún error, pero me sale nada cuando ejecuto el código. Completamente en blanco a la vista. Cambiar mediante programación la altura de la barra de navegación en swift.

Alguna sugerencia? O alguna otra manera de cambiar la altura? Gracias.

  • ahí está la respuesta a la rápida, agradable a la votación, eres bienvenido
  • Gracias por tu respuesta. Pero mi reputación punto es 8, lo que significa que no estoy autorizado a voto. Lo siento por el voto que tienes, pero no es de mí.
  • así, la primera respuesta no es la respuesta correcta, el uno con el auto.superview!.marco.tamaño.ancho, 87) pruébalo, y verás que debería funcionar igual de bien, tipo de emitir el viewcontroller, si usted sabe cómo hacer esto en Swift, lo siento por el prejuzgamiento
  • Y no puedo upvote bien o voy a recuperar su pérdida. El mínimo para upvote es de 15 y la mínima para votar es de 125. stackoverflow.com/help/privileges/vote-up. stackoverflow.com/help/privileges/vote-down
  • que son buenos para ir, no te preocupes, tengo otro tipo de casting para que pueda trabajar,
  • leer mi respuesta, de nuevo, la parte de arriba
  • funciona! Gracias!
  • Ah perfecto! traté de averiguar el tipo de fundido rápido, pero yo sólo soy un Obj C hombre, me alegro de que te saliera a trabajar, siempre me llevó a la figura de este uno de cuando estuve en tus zapatos

InformationsquelleAutor Aiden | 2015-08-14

2 Comentarios

  1. 8

    actualización para iOS 11 y más allá de

    apple no quiere que jugar con la barra de navegación de altura, por lo que no la toque
    ver aquí: https://openradar.appspot.com/32912789
    y aquí: https://forums.developer.apple.com/thread/88202#274620

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

    No hago swift, pero la respuesta es fácil, aquí ObjC

    - (CGSize)sizeThatFits:(CGSize)size {
    
             return CGSizeMake([self superview].frame.size.width, 40);
    
    }

    Aquí está mi interpretación en Swift:

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

    El problema que tienen no es con este método, esta es la parte fácil, el problema está obligando a que el controlador de navegación para siempre el uso de esta barra de navegación

    Me subclase y cambiar el tamaño de todo en IOS, incluidos los controladores de navegación y tabbarcontrollers, con el fin de exigir que todos los controladores de navegación utilizar esta barra de navegación, debe subclase de un navigationController y sólo utilizar este navigationcontroller de toda la aplicación, he aquí cómo la subclase de las obras, esto es Obj C, por lo que tendrás que traducir:

    esta es la línea que se va a hacer por usted:

    Oh, sí, y asegúrese de que son subclases de la barra de navegación, usted dijo que se fueron, pero aquí es la manera de hacerlo, es muy sencillo:

    Así que, en resumen, la subclase tanto el UINavigationBar y la UINavigationController y ya está, esto le permitirá manipular la barra de navegación siempre que lo desea, también puede escribir a emitir su controlador de vista de las barras de navegación, esto es un poco loco y va a confundir a un montón de gente, pero aquí va:

    poner las cosas por encima de su punto de vista controlador y, a continuación, se llame como este:

    Esto con éxito convertir su navigationcontroller a ser su barra de navegación personalizada, si desea cambiar la altura de la barra de navegación a partir de aquí, entonces usted puede hacer algo como esto:

    • No funciona en iOS 11. He creado subclase de UINavigationController y UINavigationBar como se describió anteriormente. En el guión gráfico, cambiar los nombres de clase de UINavigationController y UINavigationBar a los respectivos nombres de las subclases. Pero la altura no está cambiando.
    • Esto no va a funcionar iOS 11 y superiores.
    • ya no compatibles, consulte aquí: forums.developer.apple.com/thread/88202#274620 y aquí: openradar.appspot.com/32912789 apple no quiere que jugar con la barra de navegación de altura, así que me gustaría dejarlo solo, dígale a su cliente a F apagado
  2. 8

    Aquí es un simple Swift 3 solución basada en un mínimo de subclases. Primera subclase UINavigationBar.:

    Crear el controlador de navegación en el código y utilizar el inicializador que lleva su barra de navegación personalizada clase.

    Todo comportamiento existente para UINavigationBar se conserva y su altura personalizada es adoptado.

    • Cómo personalizar la barra de navegación de la clase dentro de UIStoryboard? He intentado cambiar el nombre de la clase pero no funciona.
    • sizeThatFits no es el apoyo más en ios11

Dejar respuesta

Please enter your comment!
Please enter your name here