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?
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.
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)
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 = " "
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 = " "
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)}
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
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
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"
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.
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 UIViewController
s 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í.
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)
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.
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.
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)
}
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)
}
}}
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)
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"
}
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.
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