Cómo eliminar todo navigationbar volver botón título


Cuando presiono un UIViewController, tiene algún título en el botón atrás en nuevo UIViewController, si el título tiene mucho texto, no se ve bien en el iPhone 4s, así que quiero eliminarlo.

Si agrego algún código en la función prepareForSegue, va a ser un problema.

Cualquier mejor manera de lograr esto?

Author: Parth Bhatt, 2015-04-28

18 answers

Si desea una flecha hacia atrás, el siguiente código se coloca en el archivo AppDelegate en el método didFinishLaunchingWithOptions.

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 dar a continuación.

{[13] {} En[11]}
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
{[13] {} En[12]}
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)

ACTUALIZAR 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)

Usando Offset

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

Así que puede ser que su problema haya sido resuelto.

Feliz codificación.

 91
Author: Nimit Parekh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-28 10:47:15

Estoy usando esta línea de código en el archivo AppDelegate en el método didFinishLaunchingWithOptions para eliminar el botón de retroceso 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)
 40
Author: Karthickkck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-25 10:28:07

El trabajo es como el encanto en Swift 3

self.navigationController?.navigationBar.topItem?.title = " "
 39
Author: MaheshBabu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-06 10:11:14

Puede usar xcode 8 y swift 3.0

self.navigationController?.navigationBar.backItem?.title = " "
 9
Author: Anit Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-03 18:44:00

Solo tiene que ir a su Padre ViewController desde donde sus otros ViewController son dependientes.

override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)}
 7
Author: Pravin Kamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-28 06:14:58
let barAppearace = UIBarButtonItem.appearance()
barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)

Usó esta línea de código en swift 3.0

 6
Author: Kiran jadhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-13 13:08:30

Inspirándome en la respuesta de rordulu aquí, terminé creando un controlador UINavigationController personalizado y una barra UINavigation que parece manejar todos los casos de este problema complicado.

1) Inicializar nuevo UINavigationController con su costumbre UINavigationBar:

class CustomNavigationController: UINavigationController {

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

2) Establezca la propiedad backItem.title de la barra de navegación en una cadena vacía, cada vez que la vista se establezca

class CustomNavigationBar: UINavigationBar {

    override func layoutSubviews() {
        backItem?.title = ""
        super.layoutSubviews()
    }
}

Ahora, cada vez que use este controlador de navegación y combinación de barras, nunca tendrá ¡texto del botón atrás!

Nota: esto debería funcionar bien si también usa guiones gráficos, solo asegúrese de soltar el componente de barra de navegación personalizada en la vista

 5
Author: Harry Bloom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-13 14:52:36

Normalmente añado o cambio el botón atrás en viewDidLoad del controlador UIViewController.

Algo así debería funcionar:

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

No se olvide de cambiar e implementar la función que se llama para cerrar la vista.

Aún más fácil, simplemente cambie el título:

self.navigationItem.leftBarButtonItem.title = "Back"
 4
Author: pteofil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-28 07:08:52

Es simple. ponga un espacio en el título del botón atrás y listo. Recuerde que tiene que ser en la vista anterior donde desea eliminar el texto.

introduzca la descripción de la imagen aquí

 4
Author: oscar castellon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-26 20:02:57

Puedes crear una subclase para todos los UIViewControllers para los que deseas este comportamiento, y en la subclase viewDidLoad:

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

De esta manera, puede elegir para qué controladores desea el comportamiento, sin duplicar el código. Prefiero que mis controladores digan "Atrás", en lugar del título del controlador anterior, así que establezco ese título aquí.

 3
Author: Connor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-13 13:11:06

Swift 3:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)
 2
Author: Safad Funy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-13 10:52:13

Agregar una segunda respuesta aquí como mi primera solo funciona parcialmente. Este método es menos elegante en el hecho de que requiere llamar a un método en cada vista en la aplicación, sin embargo, funciona sin efectos secundarios.

En primer lugar, cree una clase de extensión UIViewController con una función para eliminar el texto del botón atrás y agregar un botón atrás personalizado:

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 en el que lo necesite.

 1
Author: Harry Bloom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-09 10:25:05

No se por qué, pero encontré un problema con ocultar el título del botón atrás en las ventajas del iPhone, pero en el dispositivo sin plus muestra correcto con

leftBarButtonItem.title = ""

Así que encontré una manera simple. Se establece tint color para borrar en NavigationBar de NavigationViewController en autolayout. Puede ser un problema si utiliza iconos o mosaicos de texto con tinte. Pero en mi caso no lo uso como todo.

 0
Author: Vasily Avilov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-04 06:20:38

Solo usa esto:

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 llama a este método en viewDidLoad:

override func viewDidLoad() {
        super.viewDidLoad()
     removeBackButton(vc:self)
}
 0
Author: reza_khalafi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-13 08:11:39

Puede agregar esta extensión a UIViewController Y luego llame a esta función en cada viewDidLoad() como: yo.updateBackButton ()

extension UIViewController {
func updateBackButton(){
    if self.navigationController != nil {
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .done, target: self, action: nil)
    }
}}
 0
Author: Talha Ahmad Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-05 07:37:50

Swift 4

Simplemente copie este código en didFinishLaunchingWithOptions launchOptions

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000.0, 0.0), for: .default)
 0
Author: Vivek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-04 14:02:52

Solución simple:

Mientras está empujando el 2do controlador desde el 1er controlador, ponga self.navigationItem.title = "" in viewWillDisappear of 1st controller. Oculta el título del botón trasero del 2do controlador.

El estado anterior oculta el título de los controladores 1st, por lo tanto, cuando regresamos queremos el título para el controlador 1st de nuevo. Para eso tenemos add title para el 1er controlador en viewWillAppear método del 1er controlador.

Referir siguientes métodos (del 1er controlador)

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

override func viewWillAppear(_ animated: Bool) {
    self.navigationItem.title = "Title"
}
 0
Author: Mayur Shinde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-29 07:17:03

No estaba satisfecho con la solución setBackButtonTitlePositionAdjustment, así que aquí hay una alternativa rápida para ocultar todos los textos de los botones de retroceso en toda la aplicación:

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

Tendrías que llamarlos desde el AppDelegate en el didFinishLaunchingWithOptions func.

La apariencia debe estar establecida en el estado .Highlighted también para evitar que se muestren textos cuando el usuario toque el botón atrás.

 -4
Author: Juan Ariza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 14:10:20