Lo que yo quería hacer es quitar el texto del botón «Atrás» de un UIBarButtonItem, dejando sólo el azul de chevron en la barra de navegación. Tenga en cuenta que estoy desarrollando para iOS 7. He intentado varios métodos, incluyendo, pero no limitado a:

Este es el método de imagen que no me gusta (el de la imagen parecía fuera de lugar):

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

Otro método que probé fue este, que simplemente no funciona (no se muestra):

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title[email protected]"";
self.navigationItem.leftBarButtonItem=barBtn;

Lo que yo quería lograr es algo así como la vuelta botones que se encuentran en la aplicación de Música de iOS 7, que sólo aparece una sola chevron.

Gracias.

  • mira esta respuesta stackoverflow.com/a/20300577/1589731
  • ¿Por qué no tomar una imagen de lo que es su necesidad? Y que conste en leftBarButtonItem.
  • La razón por la que yo no uso la imagen es el método 1. Es muy difícil obtener una imagen perfecta del botón atrás y 2. Habrá alguna forma de desalineación con la imagen y no se ve natural, y que es la razón por la que me llevó a StackOverflow para obtener ayuda sobre cómo hacer esto de forma nativa.
InformationsquelleAutor Pan Ziyue | 2013-09-29

39 Comentarios

  1. 198
    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                             forBarMetrics:UIBarMetricsDefault];

    A continuación, puede quitar la parte de atrás del botón de título del elemento.

    Si utiliza un Guión gráfico, puede establecer los atributos de navegación inspector Botón Atrás con el espacio.

    • Esta es una interesante solución para este problema. No tengo el lujo de contar con el empuje de VC para el cambio de su título, por lo que la configuración de la apariencia para todos los UIBarButtonItem botón atrás de títulos es bastante genial!
    • Hay un problema con los grandes títulos: ellos no están centrados, pero empujado hacia la derecha, como si el botón atrás de texto todavía estaba allí
    • Esa es la única solución que funcionó para mí, gracias.
    • Se ve mucho mejor que la respuesta seleccionada, si usted necesita para restaurar la configuración original cuando el VC está cerrado.
    • Esto no funciona si el usuario se ha convertido en «Accesibilidad» – las formas de los botones»
    • Puede usted explicar «puede establecer los atributos de navegación inspector Botón Atrás con el espacio.» No encontré esto en la historia boarf
    • En el botón atrás, entrar en el espacio vacío.
    • Creo que esta es la mejor respuesta : [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal];
    • Asegúrese de llamar UIBarMetricsCompact bien si la quieres para trabajar cuando se gira en el iPhone.
    • Cualquier solución con números de magia en que es una mala idea. Con el empuje de diseño automático, tamaño de las clases, las características de accesibilidad, etc.. utilizando valores constantes como este está obligado a morder.
    • Para mejorar benjamin comentario, usted debe establecer esto para UIControlStateHighlighted así
    • Gracias @benjamin, la suya debe ser aceptado.
    • Benjamin respuesta podría funcionar, pero también pondrá en cualquier botón de la barra de elemento a un texto claro.
    • Esto hace que el texto se mueven cuando el empuje de la transición no es animado.
    • Me gustaría que se enfrentan las personas que lo utilizan y ahora viene iOS 11 😀
    • Tenga cuidado si utiliza esto en iOS 11! Causa UIViewAlertForUnsatisfiableConstraints y se puede perder un montón de tiempo de rascarse la cabeza para encontrar la fuente del problema.
    • Si en otros elementos de navegación le gustaría poner un título en el botón de la izquierda, que también desaparecería.
    • En iOS 11 acaba de enviar el valor horizontal y no vertical y parece que funciona ok, menos el roto restricción.
    • Cualquier persona tratando de ocultar de nuevo el botón de título a través de la todos los viewcontrollers en la aplicación es posible que desee comprobar mi respuesta de abajo, que no tiene efectos secundarios y se esconde sólo la parte de atrás del botón de título

  2. 411

    Para establecer la parte de atrás del botón de título para un controlador de vista sin cambiar su título de uso:

    Objective-C:

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

    Swift:

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

    Para ser claros, esto se hace en el controlador de vista de que iba a ver si pulsa el botón atrás. es decir, en lugar de ver ‘< Configuración de’ te quiero ver ‘<‘, a continuación, en su SettingsViewController que iba a poner esto en tu init. Luego de no obtener ninguno de los problemas del título no se muestran cuando usted está buscando en el controlador de vista de sí mismo.

    • De los 13 respuestas en este hilo, este es el único que trabajó derecho. GRACIAS!
    • No sé por qué la otra respuesta es marcada como correcta, es solo quitar el título a fin de que el botón atrás doent tiene un «título» para mostrar, pero eso no es la manera correcta de acercarse a todos!!!! Esta debe ser la respuesta correcta.
    • gracias. Es cierto que sólo acaba de publicar mi respuesta (8 meses después de que se le pide). Me alegro de que esto fue útil para usted, sin embargo.
    • Esto no funcionará si el título principal de los elementos de navegación en la vista principal controlador que usted está navegando a de los cambios de forma dinámica.
    • Puedo establecer este globalmente para TODOS los botones de la barra?
    • no, que yo sepa, pero no he buscado para ser capaz de hacer eso. Alternativamente, usted podría tener una clase base UIViewController que lo hace automáticamente para todos su punto de Vista de los Controladores de que la subclase es
    • Esto funciona muy bien, pero todavía tiene un gran ancho de si tengo extra UIBarButtonItems. Además, el ancho de la propiedad no funciona, probablemente porque es un «botón de radio», lo que significa (en el google docs). Es allí una manera de configurar el ancho de sólo la necesaria ancho? Gracias!
    • También a cualquier persona mediante el uso de Swift, es navigationItem.backBarButtonItem = UIBarButtonItem(título:»», estilo: .Llano, diana: nil, acción: nil). No es difícil convertir de Obj-C, Swift, pero voy a guardar la troublef
    • se llama usted esta en el UIViewController que vería si se pulsa el botón atrás? No la UIViewController que muestra el botón atrás.
    • oh no, yo no. Voy a tratar de nuevo, gracias por dejarme saber!
    • Estoy usando esta en producción, para iOS 7 y 8 sin problema. ¿Tienes el código en el anterior UIViewController? El que llegaría a ver si se golpea en la espalda?
    • sí – en la «previa» del controlador. Lo he probado en 3 o 4 lugares diferentes y funciona en algunos casos, pero no en otros.
    • en la opinión de los controladores que no están trabajando, son usted seguro de que el código se llama? Posiblemente tienes en un init, el cual no está siendo llamado? Tenga en cuenta que initWithCoder es llamado para UIViewControllers que se crean con storyboard, pero initWithNibName:paquete: es llamado cuando se crean instancias con un XIB.
    • es en viewDidLoad en cada VC. Yo no uso los storyboards. Los puntos de interrupción confirmado código que se llama.
    • tal vez trate de mover esa lógica en un método init que se llama puesto que este código no tiene nada que ver con la visión de ser cargados, que no pertenece en viewDidLoad. Pensé, pero es raro que no funciona para usted en viewDidLoad.
    • gracias por el Swift versión, lo he añadido a la respuesta para facilitar la referencia para la gente.
    • Es extraño que [self.navigationItem.backBarButtonItem setTitle:@"go back"]; no funciona. Deberá crear un nuevo botón en la barra de punto.
    • Lo que una solución elegante! Gracias. Simplemente no se sentía bien para hacer el desplazamiento de la cosa.
    • Originalmente me puso esto en viewWillAppear pero descubrió que, a veces, ese método no es llamada mientras se mueve a través de la navegación. No he sido capaz de determinar por qué es, pero se acaba de mudar a la línea de código para viewDidLoad en esos casos.
    • En lugar de poner este código en el controlador de vista, usted debe crear una subclase de la UINavigationController y el uso de la «willShowViewController» delegado método para poner esta línea de código. Esto afectará a todos los de su navegación en la aplicación con un controlador de navegación subclases. Que me diga si usted está interesado en el código, así que voy a responder a este hilo.
    • esto funciona perfectamente sin jugar con el título alignement
    • esta solución funciona perfecto si usted escribe esta línea de código en el controlador anterior en la pila de navegación.
    • Gracias! Tomó algún tiempo para encontrar esta respuesta.
    • Esto debe ser aceptado respuesta! gracias por tu ayuda.

  3. 128

    Si usted está utilizando los Storyboards usted puede ir a Attributes Inspector de la ViewController del Navigation Item (haga clic en Navigation Bar) y establecer el Back Button de propiedad «» (un carácter de espacio). De esta forma se establecerá el Botón Atrás el título de un carácter de espacio, dejando la chevron visible. No hay necesidad de meterse con el código.

    Quitar el texto del título de iOS UIBarButtonItem

    Tenga en cuenta que esto hará Back Button título para el Botón que va a pasar a este punto de Vista Controlador de la que fue empujado en la parte superior de ella, no para el Back Button que se mostrará dentro de este Controlador!

    • Me gustaría poder upvote esto más: «tenga en cuenta que esto retrasará el Botón de título para el Botón que va a pasar a este Controlador de Vista de la forma a la que fue empujado en la parte superior de ella, no para el Botón que se muestra dentro de este Controlador!»
    • Muchas gracias! Esto me ayudó mucho.
    • WOW! Muchas gracias
  4. 122

    Esto funciona para mí para mostrar sólo la ‘vuelta’ de chevron, sin ningún tipo de texto:

    self.navigationController.navigationBar.topItem.title = @"";

    Establecer esta propiedad en viewDidLoad del Controlador de Vista de la presentación de la barra de navegación y que va a hacer el truco.

    Nota: sólo he probado en iOS 7, el cual está dentro del alcance de la pregunta.

    • Que tiene un efecto secundario de eliminar el título de la etiqueta en el medio de la barra de navegación.
    • Establecer el título de la empujando VC en ‘viewWillAppear’ con la misma propiedad. De esta manera no se quita.
    • Bueno hay un problema. Si puedo configurar mi título en la -viewWillAppear y su línea en -viewDidLoad en la presentación de controlador de vista de su método no sería simplemente el trabajo y el botón Atrás todavía estará allí.
    • Si se establece la línea de arriba en viewDidLoad de la VC desea que el de chevron, sin ningún texto, funciona. Usted le daría el título de propiedad en viewWillAppear de la VC, que la empujó.
    • Me mudé ese trozo de código para -viewDidLoad de la VC que yo no quiero que el texto. Sin embargo, lo que más tarde descubrí fue que cuando llego el 2do VC de la navigationController el texto de Título que aparece poco después, no inmediatamente. Supongo que un video podría ilustrar mejor esto así que aquí es: enlace
    • Gracias por el vídeo. Sí, ese es el comportamiento cuando usted hace estallar la VC sin título. Parece que debido a que el título fue retirado de la VC no es parte de la animación cuando se mueve hacia atrás en. Por lo que sólo se muestra cuando el VC se muestra de nuevo cuando termina la animación.
    • Así que es problemático. Cualquier forma de rectificar?
    • Es la forma en que este método funciona a partir de lo que pude probar.
    • Ponerlo en mi detailsView y que se elimine el texto desde otro punto de vista que tengo demasiado-pero no me importa yo iba a agregar manualmente a mí mismo más tarde de todos modos….saludos
    • Esta no es la mejor respuesta, por favor refiérase a andyleehao la respuesta:[[UIBarButtonItem apariencia] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
    • Funciona en iOS 8.
    • Esta es la respuesta correcta según la documentación de Apple: «Cuando el receptor está en el elemento de navegación de la pila y es el segundo desde la parte superior—en otras palabras, su punto de vista controlador gestiona los puntos de vista de que el usuario podría navegar de vuelta—el valor de esta propiedad se utiliza para el botón atrás en la parte superior de la barra de navegación. Si el valor de esta propiedad es igual a cero, el sistema utiliza la cadena»», como el texto del botón atrás.»

  5. 27

    Cuando estás configuración del botón de título, utilice @» «en lugar de»@»».

    –EDIT–

    Hace nada cambia cuando se trate de otras cadenas? Estoy usando el siguiente código a mí mismo con éxito:

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
    [[self navigationItem] setBackBarButtonItem:backButton];

    backString es una variable que se establece a @» » o @»Atrás», dependiendo de si estoy en iOS 7 o una versión inferior.

    Una cosa a tener en cuenta es que este código no está en el controlador de la página que desea personalizar el botón atrás para. Es en realidad en el controlador antes de que en la navegación de la pila.

    • Hmm, iOS 7 no parece cambiar eso. Se mantiene el uso de «Atrás» como título. Si pongo setLeftBarButtonItem:backButton lugar nada estaría allí.
    • Si ese es el caso, y no pasa nada cuando se establece el título a algo más, creo que vas a tener que intentar mover el código a la vista principal del controlador. Estoy usando el código que he publicado anteriormente en mi prepareForSegue método.
  6. 27

    Quitar el texto del título de iOS UIBarButtonItem

    A veces es útil ver las cosas en contexto. Aquí está una mínima proyecto que oculta el «regreso» de texto, pero aún muestra la flecha.

    Storyboard

    Quitar el texto del título de iOS UIBarButtonItem

    Hay una exposición acerca de la «muestra otra Vista Controlador» para el segundo punto de vista controlador.

    También he añadido un Elemento de Navegación para el segundo punto de vista controlador, así que tendría un título. Esto es opcional. No afecta el botón atrás.

    Código

    FirstViewController.swift

    import UIKit
    class FirstViewController: UIViewController {
    
        @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {
    
            //hide the back button text
            navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }
    }

    SecondViewController.swift

    import UIKit
    class SecondViewController: UIViewController {
        //Nothing at all needed here
    }

    Método alternativo (IB sólo, sin código)

    En el guión gráfico, seleccione el elemento de navegación para el primera vista controlador (no la segunda). Sólo tienes que introducir un espacio en el Botón Atrás de texto.

    Quitar el texto del título de iOS UIBarButtonItem

    • WOW! Esto es genial. Gracias!
    • Clave de concepto de que » para la primera vista controlador (no la segunda)» como es el nombre de la VC que desea volver, así que es responsabilidad de dar este título.
  7. 15
    self.navigationController.navigationBar.topItem.title = @"";
    • Usted puede utilizar backItem en lugar de topItem. TopItem ocultar el título , mientras que backItem ocultar el botón atrás del título.
    • Esta es la única solución si el childViewController es en la profundidad de 2+ en el NavigationController de los niños de la pila
    • Esto también va a quitar el título de la vista anterior del controlador. En la mayoría de los casos, este va a chupar
  8. 11

    En iOS7, Apple presentó dos nuevas propiedades UINavigationBar, ‘backIndicatorTransitionMaskImage’ y ‘backIndicatorImage’.

    Simplemente llamando a la vez:

    [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

    Va a hacer que una imagen personalizada en lugar de la predeterminada chevron glifo, heredando el keyWindow del matiz de color.

    Y para quitar el título, voy a sugerir Kamaros la respuesta. Recuerde llamar a este código en el controlador de vista de que está empujando su nuevo controlador de vista. Quitar el texto del título de iOS UIBarButtonItem

    • Para ajustar el tono de color de [[UINavigationBar apariencia] setTintColor:[UIColor whiteColor]];
  9. 10

    Yo no tenía mucho éxito con las respuestas proporcionadas pero encontré una muy simple de solucionar. En su guión, puede hacer clic en su UIViewController del Elemento de Navegación y establecer el botón atrás de texto. Me puse a un único «espacio» y me dio el comportamiento que estaba buscando.Quitar el texto del título de iOS UIBarButtonItem

  10. 10

    Esto funcionó para mí en iOS10. Llame a este desde viewDidLoad de la vista controlador.

    self.navigationController?.navigationBar.topItem?.title = ""
  11. 6

    Solución Simple a este problema, trabajando en iOS7, así como 6, es para personalizar el título de la vista en viewDidLoad:

    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.backgroundColor = [UIColor clearColor];
    
        [titleLabel sizeToFit];
    
        self.navigationItem.titleView = titleLabel;
    }

    Luego, en viewWillAppear: usted puede llamar de forma segura

    self.navigationController.navigationBar.topItem.title = @" ";

    Porque su título de vista es la vista personalizada, no se sobrescribe cuando se mueve de nuevo en la pila de navegación.

    • Sólo necesitaba la última parte del código y no el espacio en blanco UILabel. Me estaba llamando [self.navigationItem.backBarButtonItem setTitle:@" "]; en viewWillAppear, pero no en los puntos de vista presentados después de despedir a un modal vista.
  12. 6

    De hecho usted puede hacer esto con sólo un truco:

    Reemplazar UINavigationBar clase y añadir esta línea de código:

    - (void)layoutSubviews{
        self.backItem.title = @"";
        [super layoutSubviews];
    }

    Luego inicializar su UINavigationController con esta costumbre UINavigationBar clase.. etc. UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

    Espero que esto ayude

    • Esto funcionó para mí. Aunque parece como si hay un ligero tartamudeo en el empuje de la animación en iOS 7: el título parece hacer de la habitación de la parte posterior de botón a continuación, los centros ya que no hay ninguno.
    • Sí, trate de usar personalizado titleView en lugar de establecer la navigationItem.título directamente. Creo que debería solucionar el problema.
    • esta solución es impresionante porque es a nivel mundial para cada navigationBar que tiene la sub-clase. Gracias
    • ALGUIEN ES DARLE A ESTE HOMBRE UN BIZCOCHO!!
  13. 5

    Yo era capaz de improvisar algo juntos utilizando DonnaLea la respuesta. Esta es la forma en la solución aparece en mi UIViewController subclase:

    var backItemTitle:String?
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        //store the original title
        backItemTitle = self.navigationController?.navigationBar.topItem?.title
    
        //remove the title for the back button
        navigationController?.navigationBar.topItem?.title = ""
    }
    
    override func willMoveToParentViewController(parent: UIViewController?) {
        super.willMoveToParentViewController(parent)
        if parent == nil {
    
            //restore the orignal title
            navigationController?.navigationBar.backItem?.title = backItemTitle
        }
    }

    El problema con la respuesta original es que se elimina el título desde el controlador al pop de vuelta a él. Intentar restablecer el título en viewWillDisappear es demasiado tarde en el proceso de transición; Esto hace que el título de complemento en lugar de animar muy bien. Sin embargo, el willMoveToParentViewController ocurre antes y permite que el comportamiento correcto.

    Advertencia: sólo he probado con una normal UINavigationController push /pop. Podría haber otras un comportamiento inesperado en otras situaciones.

  14. 4

    En el prepareForSegue: método de su primer ViewController establece que las vistas del título a @»», así que cuando la próxima vista es lo empujó a la pantalla anterior ViewController título que será @»».

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        self.navigationItem.title = @" ";
    }

    El único problema con esto es que cuando se pulse el botón de la vista anterior no tiene un título, así que usted puede agregar de nuevo en viewWillAppear:

    - (void)viewWillAppear:(BOOL)animated{
        self.navigationItem.title = @"First View Title";
    }

    No me gusta mucho esta solución, pero funciona y no he encontrado otra manera de hacerlo.

  15. 3

    No de las respuestas me ayudaron. Pero un truco que hizo que me acaba de limpiar el título de la vista controlador que empujó a (donde está el botón de atrás que está pasando a) justo antes de empuje.

    Así que cuando la vista anterior, no tener un título, en iOS 7 el botón atrás sólo tienen una flecha, sin texto.

    Sobre viewWillAppear de la empujando a ver, he puesto de nuevo el título original.

    • Hmm, este truco funciona. Sin embargo parece que las palabras que va a parpadear a veces. No es una muy buena solución, pero sin embargo una buena. +1
  16. 3
        NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [UIColor clearColor],UITextAttributeTextColor,
                                    nil];
    
        [[UIBarButtonItem appearance] setTitleTextAttributes:attributes
                                                    forState:UIControlStateNormal];

    Yo estaba teniendo un mismo problema y se me hizo de esta manera.

    –EDIT–

    esta es una solución cuando usted realmente desea eliminar el texto de título de todas UIBarbuttonItem. Si sólo desea quitar el título de la parte posterior botón de la barra de punto, no hay una simple solución conveniente. En mi caso, ya que sólo tienen unos UIBarButtonItems que necesita para mostrar el título del texto que acabo de cambiar los botones específicos’ titleTextAttributes. Si usted quiere ser más preciso utilizar el siguiente código, que sólo va a cambiar la barra de navegación de botones:

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [UIColor clearColor],UITextAttributeTextColor,
                                    nil];
    
    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:attributes
                                                    forState:UIControlStateNormal];
    • Esto funciona para mí, sin embargo, usted puede ver brevemente el texto cuando se golpea la espalda.
    • trate de añadir la misma para el Estado UIControlStateHighlighted así
    • Esto funciona bien, pero esto también se «esconde» todos los demás botones, no sólo el Botón Atrás… Alguna idea para solucionar esto?
  17. 3

    Es el uso de la subclase navigationController quita la «Vuelta».

    Estoy usando esto para eliminar de forma permanente a través de la aplicación.

    //.h
    @interface OPCustomNavigationController : UINavigationController 
    
    @end
    
    //.m
    @implementation OPCustomNavigationController
    
    - (void)awakeFromNib
    {
        [self backButtonUIOverride:YES];
    }
    
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        [self backButtonUIOverride:NO];
    
        [super pushViewController:viewController animated:animated];
    }
    
    - (void)backButtonUIOverride:(BOOL)isRoot
    {
        if (!self.viewControllers.count)
            return;
    
        UIViewController *viewController;
    
        if (isRoot)
        {
            viewController = self.viewControllers.firstObject;
        }
        else
        {
            int previousIndex = self.viewControllers.count - 1;
    
            viewController = [self.viewControllers objectAtIndex:previousIndex];
        }
    
        viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                                           style:UIBarButtonItemStylePlain
                                                                                          target:nil
                                                                                          action:nil];
    }
    
    @end
  18. 3
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                                   NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                        forState:UIControlStateNormal];
    • Por favor, agregue una explicación a su respuesta.
    • 1 hacer el mismo color que la barra de navegación de 2 de convertir el texto en tamaño lo suficientemente pequeño como para no exprimir el título
    • He revisado tu respuesta, usted siempre debe apoyar su respuesta.
  19. 2

    Ocultar de nuevo el Botón de Título de la Barra de Navegación

    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
    barButton.title = @""; //blank or any other title
    self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;
  20. 2

    Aquí es lo que estoy haciendo yo, que es más sencillo para quitar el título de botón atrás

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar?.backItem?.title = ""
    }
    • Este trabajó para mí y es muy simple.
  21. 2

    Swift 3.1
    Usted puede hacer esto mediante la aplicación del método de delegado de UINavigationController. Va a ocultar el Título con el botón atrás, le seguirá recibiendo la parte de atrás de la flecha de la imagen y la funcionalidad predeterminada.

    func navigationController(_ navigationController: UINavigationController, 
      willShow viewController: UIViewController, animated: Bool) {
            let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                        action: nil)
            viewController.navigationItem.backBarButtonItem = item
        }
    • Esta es la mejor solución que he visto por ahora. Gracias.
  22. 1

    También puede utilizar este:

    UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
    temporaryBarButtonItem.title = @"";
    self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
    
    [temporaryBarButtonItem release];

    Esto funciona para mí

  23. 1
    case : <Back as <
    
    override func viewWillAppear(animated: Bool) {
    navigationController!.navigationBar.topItem!.title = ""
        }
  24. 1

    Solución perfecta a nivel mundial

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)
    
        return true
    }
    • Gran solución!
    • Se anima a cabo cuando se empuja vcs, no es una buena solución
    • dumpest solución de todos … y que también utiliza el espacio como antes … y que acaba de convertirse en transparente …
    • Elimina el texto de todos los UIBarButtonItems de la aplicación
  25. 1

    Puedo crear una clase personalizada para UINavigationController y se aplican a todos los controladores de navegación en la aplicación. Dentro de esta costumbre UINavigationController clase I conjunto de la UINavigationBar delegado de self una vez que la vista de las cargas.

    - (void)viewDidLoad {
        self.navigationBar.delegate = self;
    }

    A continuación, implementar el método delegado:

    - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {
    
        //This will clear the title of the previous view controller
        //so the back button is always just a back chevron without a title
        if (self.viewControllers.count > 1) {
            UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
            previousViewController.title = @"";
        }
        return YES;
    }

    De esta manera simplemente me asigne mi clase personalizada a todos mis navegaciones de los controladores y se borra el título de todos los botones de la espalda. Y sólo para aclarar, yo siempre se establece en el título para todos los de mi otro punto de vista de los controladores dentro de viewWillAppear para que el título está siempre actualizado justo antes de la vista aparece (en el caso de que se elimina por trucos como este).

  26. 1

    Acaba de entrar en un espacio único en el botón Atrás de elementos de navegación funciona!!

    • Esto es más adecuado como un comentario de una respuesta.
  27. 1

    Si como yo, usted está utilizando una vista personalizada en lugar de la UINavigationBar y usted está atascado con el botón atrás, a continuación, usted tiene que hacer un poco de trabajo, que se siente un poco cludgey.

    [self.navigationController.navigationBar setHidden:NO];
    self.navigationController.navigationBar.topItem.title = @"";
    [self.navigationController.navigationBar setHidden:YES];

    Parece como si no se presenta a continuación, no importa lo que voy a tratar de mostrar un título, esto significa que es la que se muestra a continuación, ocultos antes de que se dibuja y se soluciona el problema.

  28. 1
    extension UIViewController{
        func hideBackButton(){
            navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }
    }
  29. 1

    He hecho un cero simple de configuración de la categoría de » ocultar todos los de vuelta el botón de títulos a través de la aplicación usted puede comprobar fuera aquí. Esta pregunta ya ha aceptado la respuesta, pero para otros puede ser útil.

    EDICIÓN:

    .h archivo

    #import <UIKit/UIKit.h>
    
    @interface UINavigationController (HideBackTitle)
    extern void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector);
    
    @end

    .m archivo

    #import "UINavigationController+HideBackTitle.h"
    #import <objc/runtime.h>
    
    
    @implementation UINavigationController (HideBackTitle)
    
    + (void)load {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            PJSwizzleMethod([self class],
                        @selector(pushViewController:animated:),
                        @selector(pj_pushViewController:animated:));
        });
    }
    
    - (void)pj_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
        UIViewController *disappearingViewController =  self.viewControllers.lastObject;
        if (disappearingViewController) {
            disappearingViewController.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
        }
        if (!disappearingViewController) {
            return [self pj_pushViewController:viewController animated:animated];
        }
        return [self pj_pushViewController:viewController animated:animated];
    }
    
    
    
    @end
    
    void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector)
    {
        Method originalMethod = class_getInstanceMethod(cls, originalSelector);
        Method swizzledMethod = class_getInstanceMethod(cls, swizzledSelector);
    
        BOOL didAddMethod =
        class_addMethod(cls,
                    originalSelector,
                    method_getImplementation(swizzledMethod),
                    method_getTypeEncoding(swizzledMethod));
    
        if (didAddMethod) {
            class_replaceMethod(cls,
                            swizzledSelector,
                            method_getImplementation(originalMethod),
                            method_getTypeEncoding(originalMethod));
        } else {
            method_exchangeImplementations(originalMethod, swizzledMethod);
        }
    }
  30. 1

    Esta es la mejor solución.

    Otra solución es peligroso porque es hack.

    extension UINavigationController {
    
        func pushViewControllerWithoutBackButtonTitle(_ viewController: UIViewController, animated: Bool = true) {
            viewControllers.last?.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
            pushViewController(viewController, animated: animated)
        }
    }
  31. 1

    Si quieres quitar la parte de atrás del botón de título del elemento en iOS11, usted puede probarlo!

    @implementation UIView (PrivateBackButton)
    
        + (void)initialize {
            if ([NSProcessInfo processInfo].operatingSystemVersion.majorVersion < 11.0) return;
            static dispatch_once_t onceToken;
            dispatch_once(&onceToken, ^{
                [NSObject hookInstanceMethodForClass:[self class] originalMethod:@selector(layoutSubviews) newMethod:@selector(mc_layoutSubviews)];
            });
        }
    
        - (void)mc_layoutSubviews {
            [self mc_layoutSubviews];
            [self updateiOS11LaterUI];
        }
    
        - (void)updateiOS11LaterUI {
            if ([NSProcessInfo processInfo].operatingSystemVersion.majorVersion < 11.0) return;
            if (![self isKindOfClass:NSClassFromString(@"_UIBackButtonContainerView")]) return;
    
            [self removeAllSubviews];
            [self.superview mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.width.mas_equalTo(@44);
            }];
        }
    
        @end
    • Gracias por este fragmento de código, que podría proporcionar algunos a corto plazo limitado de ayuda. Una explicación adecuada , mejoraría mucho su valor de largo plazo, mostrando a la porque esta es una buena solución para el problema y que sea más útil para los lectores futuros con otras preguntas similares. Por favor, editar su respuesta a añadir alguna explicación, incluyendo las suposiciones que hemos hecho.
  32. 0

    No podía llegar a trabajar con Guto Araujo de la respuesta de navigationBar.topItem.title = @"";

    Sin embargo, yo era capaz de conseguir el efecto deseado mediante el establecimiento de self.title = @"" en el init método de mi punto de vista controlador. (Configuración en init es importante, viewDidLoad no funciona).

  33. 0

    Estoy enumerando las soluciones que trabajó para mí hasta ahora.

    override func viewDidLoad() {
    super.viewDidLoad()   
    
    
    
    self.navigationController?.navigationBar.topItem?.title = "" //1
    
     let barAppearace = UIBarButtonItem.appearance()
    barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)  //2
    
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal) //3
    
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted) //4   
    
    
    
    }
  34. 0

    Implementar su propio UIViewController base de clase y reemplazar setTitle:.

    @interface CustomViewController : UIViewController
    @end
    
    @implementation CustomViewController
    
    - (void)setTitle:(NSString *)title {
        super.title = @""; //This will remove the "Back" title
        UILabel *titleView = [UILabel new];
        //customize the label as you wish
        titleView.text = title;
        [titleView sizeToFit];
        self.navigationItem.titleView = titleView;
    }
    
    @end

    Ahora en cualquier UIViewController donde desea establecer el título, sólo se pueden escribir self.title = @"MyTitle" como lo haría normalmente, y no de texto aparecerá en la parte de atrás de la barra de elemento al empujar un nuevo UIViewController.

  35. 0

    En iOS 11 puede utilizar el siguiente código para ocultar de nuevo el botón de título:

    Swift:

    UIBarButtonItem.appearance().setTitleTextAttributes([ NSForegroundColorAttributeName : UIColor.clear ], for: .normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([ NSForegroundColorAttributeName : UIColor.clear ], for: .highlighted)

    Este código no quitar el título de la barra de navegación, pero sólo hace que sea transparente, para botón atrás todavía tiene espacio para el título. Si usted necesita para tener más espacio para ver el controlador de título, entonces usted necesita para utilizar otra solución.

    • Esto también hace que el todo botones transparentes, no sólo en el botón atrás.
  36. -1

    Sólo es necesario poner en blanco el texto del título en ParentViewController.

    self.navigationItem.title[email protected]"";

    Si usted necesita el título de texto, a continuación, Poner por debajo de los dos métodos en ParentViewController.

    -(void)viewWillAppear:(BOOL)animated
    {
        self.navigationItem.title = @"TitleText";
    }
    
    -(void)viewWillDisappear:(BOOL)animated
    {
        self.navigationItem.title[email protected]"";
    }
  37. -3

    Acaba de establecer desplazamiento para UIBarButtonItem apariencia.

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000)
                                                         forBarMetrics:UIBarMetricsDefault];
    • Parece que la barra de navegación, el título es todavía offset para hacer espacio para el botón atrás de texto, incluso si no es visible.
  38. -3

    Esto funcionó para mí en iOS 7+:

    En viewDidLoad:

    self.navigationItem.backBarButtonItem.title = @" ";

    Sí, que es un espacio entre las comillas.

    • No funciona si usted empuja el controlador de vista desde el código.

Dejar respuesta

Please enter your comment!
Please enter your name here