virtuales subrayado samsung quitar ocultar navegacion iconos como botones barra ios swift uibarbuttonitem

ios - subrayado - Cómo eliminar todo el título del botón de retroceso de la barra de navegación



ocultar barra de navegacion s9 (27)

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

Si agrego algo de código en la función prepareForSegue , será un problema.

Cualquier mejor manera de lograr esto?


Agregar una segunda respuesta aquí ya que la primera solo funciona parcialmente. Este método es menos elegante en el hecho de que requiere llamar a un método en cada vista de 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 de retroceso y agregue un botón de retroceso 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, simplemente podemos llamar a esta función en viewDidLoad de cada controlador de vista en el que lo necesite.


El trabajo es como encanto en Swift 3

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


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


Estoy usando esta línea de código en el archivo AppDelegate en el método didFinishLaunchingWithOptions para eliminar el title botón de retroceso.

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)


Funciona en Swift 5 :

self.navigationItem.backBarButtonItem?.title = ""

Tenga en cuenta que será efectivo para el próximo controlador de vista presionado, no el actual en la pantalla, ¡por eso es muy confuso!

Además, verifique el guión gráfico y seleccione el elemento de navegación del controlador de vista anterior , luego escriba algo en el Botón Atrás (Inspector).


Funciona para Swift 4.2

Usando la línea de código en el archivo AppDelegate 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)


Me gustaría compartir una solución que funcione para mí. Además, se puede ajustar según sus necesidades y requisitos.

Tenga en cuenta que, en mi caso, 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() } }


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)

didFinishLaunchingWithOptions llamarlos desde AppDelegate en la función didFinishLaunchingWithOptions .

La apariencia debe configurarse en el estado .Highlighted también para evitar que se muestren textos cuando el usuario toca el botón Atrás.


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

leftBarButtonItem.title = ""

Entonces encontré la manera simple. Se establece el color de tinte para borrar en NavigationBar de NavigationViewController en autolayout. Puede ser un problema si usa iconos o mosaicos de texto con tinte. Pero en mi caso no lo uso como todo.


Ponga el siguiente código en cualquiera de las UIViewcontroller extension , ocultará todo el texto posterior de UIViewcontroller

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


Por lo general, agrego o cambio el botón Atrás en viewDidLoad del UIViewController.

Algo así debería funcionar:

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

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

Aún más fácil, solo cambia el título:

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000.0, 0.0), for: .default)


Puede agregar esta extensión a UIViewController y luego llamar a esta función en cada viewDidLoad () como: self.updateBackButton ()

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


Puede crear una subclase para todos los UIViewController los que desea este comportamiento, y en viewDidLoad la subclase:

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

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


Puede usar xcode 8 y swift 3.0

self.navigationController?.navigationBar.backItem?.title = " "


Si desea la flecha hacia atrás, siga el código que 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 da a continuación.

En el 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)

Usando Offset

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

Entonces puede ser que su problema haya sido resuelto.

Feliz codificación


Simplemente copie este código en didFinishLaunchingWithOptions launchOptions

Swift 5

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

Swift 4

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


Simplemente cree la extensión de UIViewController con la función de anulación awakeFromNib() y UIBarButtonItem con un título vacío y dele a la navigation backBarButtonItem .

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


Solo necesita ir a su ViewController principal desde donde dependen sus otros ViewControllers.

override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)}


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 }

Entonces llame a este método en viewDidLoad:

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


Swift 3:

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


para swift 4,5

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


Respuesta actualizada para Swift 4.2

Trabajar con UIAppearance es una forma más limpia de resolver el problema, pero provocaría que todo el UIBarButtonItem tenga un texto claro. Una versión mejorada de la solución podría ser verificar si el UIBarButtonItem está contenido en un UINavigationBar .

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


Solución simple :

Mientras empuja el segundo controlador del primer controlador, coloque self.navigationItem.title = "" en viewWillDisappear del primer controlador. Oculta el título del botón de retroceso del segundo controlador.

El estado anterior oculta el título del primer controlador, por lo tanto, cuando regresamos, queremos el título para el primer controlador nuevamente. Para eso hemos agregado el título para el primer controlador en el método viewWillAppear del primer controlador.

Consulte los siguientes métodos (del primer controlador)

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


Swift 4.2

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


Swift 4.2 y 5

En lugar de jugar con el color de tinte de la barra de navegación, que tendrá efectos secundarios si está utilizando el selector de imágenes en cualquier momento posterior en su código.

Use el siguiente código:

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

Llámalo desde tu primer ViewController:

self.awakeFromNib()


rordulu''s respuesta de rordulu''s here , terminé creando un UINavigationController y una barra de UINavigation personalizados que parecen manejar todos los casos de este complicado problema.

1) Inicialice el nuevo UINavigationController con su UINavigationBar personalizado:

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

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

self.navigationItem.leftBarButtonItem.title = "Back"

Ahora, cada vez que use este controlador de navegación y combinación de barra, ¡nunca tendrá texto de botón de retroceso! 🎉

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


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

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