uitabbarcontroller programmatically swift 4
Cómo ocultar el título en el elemento de la barra de pestañas con el controlador de navegación (6)
Tengo un elemento de la barra de pestañas en el controlador de navegación conectado con el controlador de la barra de pestañas y quiero eliminar el título rápidamente
Controlador de barra de pestañas> Controlador de navegación> Controlador de vista
Artículo de barra de tabulación
La aplicación comienza con el controlador de la barra de pestañas con cinco pestañas, cada una de estas pestañas funciona bien, es decir, oculta el título debajo del elemento de la barra de pestañas, pero la pestaña de la imagen solo tiene el problema de que no está oculta y para eso la aplicación También trabajando en esta pestaña está bien si el usuario está desconectado y se muestra Viewcontroller en la imagen, pero si el usuario está ingresando, se muestra el título en la barra de pestañas, por lo que si no puedo ocultar el título por programación
En Xcode
vaya a su guión gráfico, luego de eso, haga clic en el controlador de navegación donde se encuentra el ícono. Haga clic en el tabBarItem
en la parte inferior del navigationController. En el lado izquierdo ve al inspector de atributos y borra el título del artículo bar.
También puede hacerlo mediante programación, aunque su storyboard seguirá siendo diferente.
let items = self.tabBarController?.tabBar.items
let tabItem = items![2]
tabItem.title = ""
Las pestañas se pueden configurar con un título en el UITabBarItem
, que se reemplaza por el título del controlador de vista raíz en la pestaña. Así que imagino que está configurando title = "Booking"
en BookingViewController.
No hay una API que conozca para ocultar explícitamente los títulos de las pestañas, pero puedes ocultarlas moviéndolos básicamente de la pantalla:
let tabBarTitleOffset = UIOffsetMake(0,50)
for controller in tabBarController.viewControllers? {
controller.tabBarItem.titlePositionAdjustment = tabBarTitleOffset
}
Entonces, sus iconos pueden aparecer un poco altos, que también puede ajustar para compensar estableciendo tabBarItem.imageInsets
.
puedes probar esto
agregue esto en controladores de vista que no quiere título
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.title = ""
}
Hace poco me encontré con esta pregunta y pensé que publicaría mi propia solución, para la posteridad, ya que creo que es bastante ligera y algunos pueden preferirla.
En primer lugar, independientemente de cómo cree sus elementos de pestañas (la mía es una subclase UITabBarController a la que le paso mis controladores hijos): establezca el título del elemento de pestañas en una cadena vacía.
(Por supuesto, esta solución también es específica para el escenario OP donde tienes un Controlador Tabbar con un Controlador Nav integrado, que es relativamente común).
Como probablemente sepa, establecer el título de UIViewController hará que la pestaña relacionada recoja el título.
Para tener un título de UIViewController sin establecer el título del elemento de tabulación, agregue un nuevo UILabel a la vista de título del elemento de navegación del controlador de vista .
Terminé creando una extensión en UIViewController así:
extension UIViewController {
func addNavItemTitle(resourceString: String, textColor: UIColor = UIColor.white) {
// Add title view ~ allows overriding title w/out showing it on tabBarItem
let titleLabel = UILabel()
titleLabel.text = NSLocalizedString(resourceString)
titleLabel.textColor = textColor
titleLabel.font = UIFont.viewTitle
titleLabel.sizeToFit()
self.navigationItem.titleView = titleLabel
}
}
Personaliza tus fuentes y colores como quieras. Deje que el tamaño de la etiqueta sea el mismo para que no tenga que medirlo o establecer su marco aquí.
También prefiero usar cadenas localizadas vs. establecer las cadenas directamente.
Ahora, en cualquier controlador hijo de pestañas, para establecer mi título de controlador de vista sin seleccionar un título de elemento de pestañas, solo llamo a addNavItemTitle(resourceString: "example.title")
Un buen lugar está en viewDidLoad
También puede haber notado que mi llamada a NSLocalizedString
le falta un argumento. Eso es porque tiendo a usar la misma cadena para el comentario como la cadena de recursos. Así que creé una función global para simplificar la llamada sin repetir la cadena.
Al igual que:
public func NSLocalizedString(_ key: String) -> String {
return NSLocalizedString(key, comment: key)
}
UITabBarItem
una subclase de UITabBarItem
que limita la configuración del title
esta manera:
final class MyTabBarItem: UITabBarItem {
override var title: String? {
get { return nil }
set { super.title = title }
}
override var imageInsets: UIEdgeInsets {
get { return UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0) }
set { super.imageInsets = imageInsets }
}
convenience init(image: UIImage? , selectedImage: UIImage?) {
self.init()
self.image = image
self.selectedImage = image
}
override init() {
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
A continuación, inicialice el tabBarItem
su controlador de tabBarItem
usando su clase personalizada:
tabBarItem = MyTabBarItem(image: UIImage(named: "my_img"), selectedImage: nil)
Como otros han sugerido, puede ir a Interface Builder y borrar el título en el artículo de la barra o puede hacerlo programáticamente.
Esto es suficiente siempre que no establezca la propiedad del título para el UIViewController al que se vincula su pestaña. Si desea establecer un título para su controlador de vista y evitar que se muestre como el título del elemento de barra, use navigationItem.title = "My Title"
lugar de title = "My Title"
.