Cuando presiono un UIViewController, tiene algún título en el botón atrás situado en nueva UIViewController, si el título tiene una gran cantidad de texto, no Se ve muy bien en el iPhone 4s, Así que quiero quitar.

Si puedo añadir algo de código en prepareForSegue función, va a ser un problema.

Mejor manera de lograr este?

  • también puede cambiar el título del botón atrás. y para volver requiere botón atrás . así que creo que no es necesario retirar el botón atrás.
  • por favor informar después de resolver su problema.
  • consulte esta respuesta stackoverflow.com/a/48801613/3976183
InformationsquelleAutor jansma | 2015-04-28

23 Comentarios

  1. 111

    Si quieres flecha hacia atrás de modo de código siguiente se puso en AppDelegate archivo en didFinishLaunchingWithOptions método.

    For Objective-C

     [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];

    For Swift

    let BarButtonItemAppearance = UIBarButtonItem.appearance()
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)

    Otra opción que se dan a continuación.

    En Objective C

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

    En Swift

    self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)

    ACTUALIZACIÓN :

        let BarButtonItemAppearance = UIBarButtonItem.appearance()
    
        let attributes: [NSAttributedStringKey: Any] = [
        BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
                NSAttributedStringKey.font: UIFont.systemFont(ofSize: 0.1),
                NSAttributedStringKey.foregroundColor: UIColor.clear]
    
        BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
        BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)

    ACTUALIZACIÓN SWIFT 4.1 :

        let attributes = [NSAttributedStringKey.font:  UIFont(name: "Helvetica-Bold", size: 0.1)!, NSAttributedStringKey.foregroundColor: UIColor.clear]
    
        BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
        BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)

    Mediante El Desplazamiento

    UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000, 0), for:UIBarMetrics.default)

    Así que puede ser el problema ha sido resolver.

    Feliz codificación.

    • setBackButtonTitlePositionAdjustment no siempre funciona, cuando la parte de atrás del botón de título es muy largo, pero no el tiempo suficiente para cambiar a «Volver», el título en el medio se mueve a la derecha.
    • es sólo un tema de cuán grande es su desplazamiento. usted puede fácilmente reemplazar ‘-60’ con ‘-6000’ y olvidarse de este problema
    • Sólo un poco de precisión aquí, el título pertenece a la vista ANTERIOR del controlador. Así que recuerda, para establecer allí, antes de que el presentViewController o pushViewController método.
    • Hmm, esto no funciona en el AppDelegate. «El valor de tipo de AppDelegate no tiene ningún miembro navigationItem»
    • ¿qué estás haciendo?
    • He intentado esto: auto.navigationItem.backBarButtonItem = UIBarButtonItem(título: «», estilo: UIBarButtonItemStyle.Llano, diana: nil, acción: nil)
    • Tratando de quitar el botón atrás de texto para todos mis puntos de vista…
    • Que parece funcionar. Es un hack o es que el enfoque recomendado? Gracias.
    • Estoy de acuerdo no se puede encontrar la forma para establecer el botón de la barra oculta de la aplicación de ancho, así que sólo hay que poner el valor de ajuste para -999999
    • Usted debe configurar su navigationItem en su viewController (en algún lugar como viewDidLoad:) en lugar de AppDelegate. A continuación, se debe trabajar.
    • Hay alguna que NO HACKY manera de hacerlo? Esto parece muy complicado, o realmente no es una buena manera de ocultar la etiqueta simplemente poner la posición de la etiqueta de distancia… que quiero decir es que hay alguna forma de ajustar su texto a «»??
    • He hecho una categoría para este tipo de comportamiento que se esconde atrás del botón de título de cada donde en la app, que es un poco «NO HACKY» camino, sólo tiene que añadir la categoría en su proyecto y listo . Estoy en desacuerdo con la solución de posición de ajuste utilizando setBackButtonTitlePositionAdjustment:forBarMetrics: si el usuario ha habilitado un botón de forma de configuración de accesibilidad de la figura se muestran hasta acabar feo de la barra de navegación.
    • setBackButtonTitlePositionAdjustment va a romper su alineación vertical en iOS11
    • Me estoy enfrentando este problema de roto la alineación vertical, ¿tiene alguna solución mejor para ocultar la parte de atrás del título ampliamente ? (No me wan no hacerlo en cada uno de los viewcontroller de mi app).
    • No, lo siento… en mi caso solo tuve que ocultar un par de veces, así que no fue un problema. Supongo que alguien va a venir para arriba con algo más pronto que tarde.. o usted puede dar vuelta a apple dev foros para una respuesta.
    • no funciona correctamente en xcode 9. El desplazamiento afecta no sólo a la parte de atrás del botón de texto, sino también hacia las flechas de posición. mismo código funciona correctamente en xcode 8. Tiene u tiene alguna solución para esto?
    • Gracias! Se está trabajando bien.
    • Parece un hacky manera. Todavía se puede ver el «Regreso» de texto durante al hacer clic en el botón atrás.
    • Esto afecta no sólo a la espalda del botón de título, sino también por ejemplo la búsqueda de controlador de botón cancelar. Así que ten cuidado!, que podría ser mejor para establecer la pantalla anterior título a una cadena vacía.

  2. 56

    De la obra como el encanto de Swift, 3

    self.navigationController?.navigationBar.topItem?.title = " "
    • La única solución que me funciona. Gracias !
    • Este es el único que funcionó cuando el uso de navigationController?.pushViewController(_, animated:)
    • Gracias, compañero. Este fue el único que funcionó. Saludos.
    • Trabajó para mí también Swift 4
    • Funciona. Mejor escribir una extensión para UIViewController con esta línea.
    • funciona como un encanto!
    • funciona, pero cuando vuelvo a los padres de que no tiene la barra de navegación del título …
    • cualquier solución al problema? He encontrado la única solución para actualizar de nuevo el título en viewWillAppear:.
    • stackoverflow.com/a/45366130/5061249 mejor resuelve el problema sin ningún efecto secundario.
    • esto quita el título de la vista anterior

  3. 48

    Estoy usando esta línea de código en AppDelegate archivo en didFinishLaunchingWithOptions método para quitar el boton atrás title.

    Swift 2.x

    let barAppearace = UIBarButtonItem.appearance()
    barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)

    Swift 3.x

    UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)

    Swift 4.x

    UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: UIControlState.highlighted)
    • setBackButtonTitlePositionAdjustment no siempre funciona, cuando la parte de atrás del botón de título es muy largo, pero no el tiempo suficiente para cambiar a «Volver», el título en el medio se mueve a la derecha.
    • No es absolutamente trabajo
    • No se trata de una solución ideal. Si seleccionamos cualquiera de navegación del título, sin cambiar la barra de navegación izquierda del elemento de título, el título se desplazará a la derecha por el hecho de navegación izquierdo de la barra de título insertos.
    • en iOS 11 es acabar con la posición del botón. Cae por debajo de su posición original
    • Cómo se supone que funciona? El texto todavía será accesible a través de la voz en off.
    • Esto crea problema a la hora de anular o hacer barbuttonitem no son visibles cuando la presentación de imagepicker o algo

  4. 13

    Sólo se necesita ir a su Padre ViewController desde donde su otro ViewControllers son dependientes.

    override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(true)
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)}
    • La única solución que me funciona. Gracias!
  5. 7

    Puede utilizar xcode 8 y swift 3.0

    self.navigationController?.navigationBar.backItem?.title = " "
    • Esto no quitar el título de la vista anterior del controlador en total?
    • Sí, le van a quitar el título para todos los ViewControllers empujado desde self.navigationController
    • entonces ¿cuál es el punto de esto??
  6. 6
    let barAppearace = UIBarButtonItem.appearance()
    barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)

    utilizado esta línea de código swift 3.0

    • muchas gracias
    • afectará el botón cancelar para UISearchController
  7. 5

    Puede crear una subclase para todos los UIViewControllers desea este comportamiento, y en el de la subclase,viewDidLoad:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.backBarButtonItem = UIBarButtonItem(
            title: "", style: .plain, target: nil, action: nil)
    }

    De esta manera, usted puede elegir que los controladores que desea el comportamiento, sin duplicación de código. Yo prefiero que mis controladores de simplemente decir «Volver», más que el título de la anterior controlador, así que me puse ese título aquí.

  8. 5

    Tomando la inspiración de rordulu del respuesta aquí, terminé creando una costumbre UINavigationController y UINavigation bar que parece manejar todos los casos de este complicado problema.

    1) Inicializar las nuevas UINavigationController con su costumbre UINavigationBar:

    class CustomNavigationController: UINavigationController {
    
        convenience init() {
            self.init(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil)
        }
    }

    2) Establecer el backItem.title propiedad de la barra de navegación a una cadena vacía, cada vez que la vista se pone a sí mismo

    class CustomNavigationBar: UINavigationBar {
    
        override func layoutSubviews() {
            backItem?.title = ""
            super.layoutSubviews()
        }
    }

    Ahora cada vez que utilice este controlador de navegación y barra de combinación, nunca va a tener de nuevo el texto de los botones! 🎉

    Nota: esto debería de funcionar bien si el uso de storyboards también, sólo asegúrese de colocar la barra de navegación personalizada componente en la vista

    • Increíble, muchas gracias! Esta es la mejor manera de hacerlo y debe ser la respuesta correcta 🙂
    • Di cuenta de que esto tiene un efecto secundario en el que se limpie el elemento de navegación título completo. Así que cuando la vista anterior muestra, que no tienen un título! Yo voy a llevar en mi búsqueda de la solución perfecta a este problema molesto.
    • maldita sea correcto. ¿Cómo pude perderte! Por favor dime si encuentras una solución de este problema. gracias
    • Podría usted encontrar la solución perfecta @HarryBloom?
    • No es una solución perfecta, pero he encontrado algo que funciona. Han añadido una segunda respuesta aquí stackoverflow.com/a/49094282/1532838
  9. 3

    Yo suelo añadir o cambiar el botón atrás en viewDidLoad de la UIViewController.

    Algo así como que se debe trabajar:

    let leftButton = UIBarButtonItem(title: "Back", style:     UIBarButtonItemStyle.Plain, target: self, action: "closeView:")
    self.navigationItem.leftBarButtonItem = leftButton

    No olvides cambiar y aplicar la función que se llama a cerrar la vista.

    Aún más fácil, basta con cambiar el título:

    self.navigationItem.leftBarButtonItem.title = "Back"
    • De esta forma se rompe iOS soporte integrado para deslizar a izquierda o derecha para navegar de vuelta, y en mi humilde opinión, las aplicaciones que romper este son realmente irritante.
    • Sí, este enfoque es muy malo…
  10. 3

    Simplemente copia este código en didFinishLaunchingWithOptions launchOptions

    Swift 5

    UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -1000.0, vertical: 0.0), for: .default)

    Swift 4

    UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000.0, 0.0), for: .default)
    • Única respuesta Correcta!!!
  11. 2

    Swift 3:

    self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)
  12. 2

    La adición de una segunda respuesta aquí como mi primera sólo parcialmente las obras. Este método es menos elegante en el hecho de que es necesario llamar a un método en cada vista de la aplicación, sin embargo, funciona sin ningún tipo de efectos secundarios.

    Así que en primer lugar, crear un UIViewController extensión de la clase con una función para eliminar el botón atrás de texto y agregar una costumbre botón atrás:

    extension UIViewController {
    
    func setBackButton() {
        navigationController?.navigationBar.backIndicatorImage = R.image.backArrow()
        navigationController?.navigationBar.backIndicatorTransitionMaskImage = R.image.backArrow()
        navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    }

    En segundo lugar, podemos simplemente llamar a esta función en el viewDidLoad de cada controlador de vista que la necesitan.

  13. 2

    Solución Simple :

    Mientras la empuja 2º controlador desde el 1 de controlador, poner auto.navigationItem.title = «» en viewWillDisappear de 1 de controlador. Se esconde de nuevo el botón de título de 2ª controlador.

    Por encima de declaración oculta 1 de controladores de título, por lo tanto, cuando volvimos nos quieren título para el 1 de controlador de nuevo. Para los que tenemos agregar título para el 1 de controlador en viewWillAppear método de controlador de 1er.

    Consulte métodos siguientes (del 1 de controlador)

        override func viewWillDisappear(_ animated: Bool) {
        self.navigationItem.title = ""
    }
    
    override func viewWillAppear(_ animated: Bool) {
        self.navigationItem.title = "Title"
    }
  14. 2

    Swift 4.2

    UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: UIColor.clear], for: .normal)
    • Cancelar y Hacer botón de imagepicker desaparecido en este enfoque
  15. 2

    Respuesta Actualizada Para Swift 4.2

    De trabajo con UIAppearance es un limpiador de la forma de solucionar el problema, pero esto haría que todos los UIBarButtonItem tener un texto claro. Una versión mejorada de la solución podría ser la de comprobar si el UIBarButtonItem está contenida en un UINavigationBar.

        UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)
  16. 0

    No sé por qué pero me he encontrado con el problema de ocultar de nuevo el botón de título en el iPhone ventajas, pero en dispositivo sin plus muestra correcta con

    leftBarButtonItem.title = ""

    Por lo que he encontrado manera sencilla. Es el conjunto de tinte de color claro en NavigationBar de NavigationViewController en el diseño automático. Puede ser un problema si usted usa los iconos o texto azulejos con un matiz. Pero en mi caso no utilizo como todos.

  17. 0

    Sólo tiene que utilizar esta:

    func removeBackButton(vc:UIViewController) {
            let button = UIButton.init(type: .custom)
            button.setImage(UIImage.init(named:""), for: .normal)
            let leftBarButton = UIBarButtonItem.init(customView: button)
            vc.navigationItem.leftBarButtonItem = leftBarButton
    }

    Así que llame a este método viewDidLoad:

    override func viewDidLoad() {
            super.viewDidLoad()
         removeBackButton(vc:self)
    }
  18. 0

    Puede añadir esta extensión para UIViewController
    Y, a continuación, llamar a esta función en cada viewDidLoad()
    como : auto.updateBackButton()

    extension UIViewController {
    func updateBackButton(){
        if self.navigationController != nil {
            self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .done, target: self, action: nil)
        }
    }}
  19. 0

    Me gustaría compartir una solución que funciona para mí. También, se puede ajustar de base en sus necesidades y requerimientos.

    Nota, en mi caso, yo uso un guión gráfico para especificar CustomNavigationBar

    Swift 4.2

    class CustomNavigationBar: UINavigationBar {
    
        override func awakeFromNib() {
            super.awakeFromNib()
            guard let topItem = topItem else { return }
            removeBackButtonTitle(for: topItem)
        }
    
        override func pushItem(_ item: UINavigationItem, animated: Bool) {
            removeBackButtonTitle(for: item)
            super.pushItem(item, animated: animated)
        }
    
        func removeBackButtonTitle(for item: UINavigationItem) {
            item.backBarButtonItem = UIBarButtonItem()
        }
    }
  20. 0

    Obras para Swift 4.2

    Mediante la línea de código en AppDelegate archivo en didFinishLaunchingWithOptions

        UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)
    
        UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .highlighted)
  21. 0

    Swift 4.2 & 5

    Lugar de jugar con la barra de navegación matiz de color que va a tener efectos secundarios si usted está usando la imagen del selector en cualquier momento más adelante en el código.

    Utilizar a continuación el código:

    extension UIViewController {
            open override func awakeFromNib() {
                navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }  
    }

    Llamar desde su primera ViewController:

    self.awakeFromNib()
  22. -4

    Yo no estaba satisfecho con el setBackButtonTitlePositionAdjustment solución, así que aquí está una rápida alternativa para ocultar todos los de vuelta el botón de textos en todo el applicataion:

        UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: barbuttonFont, NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: barbuttonFont, NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

    Usted tendría que llamar a estos de la AppDelegate en el didFinishLaunchingWithOptions func.

    Apariencia debe ser fijado a la .Highlighted estado demasiado para evitar que los textos se muestran cuando el usuario pulsa el botón atrás.

    • que oculta todos los demás UIBarButtonItems así

Dejar respuesta

Please enter your comment!
Please enter your name here