Cómo agregar un ícono pequeño debajo del ícono seleccionado de UITabBarItem en Swift

Tengo una subclass UITabBarController y quiero agregar un pequeño icono rectangular blanco debajo del ícono UITabBarItem seleccionado. Utilicé una UIView y obtuve el TabBarItem como una subvista y TabBarItem la vista como una subvista. Estoy haciendo esto en viewWillAppear , muestra pero cuando selecciono otra pestaña no aparece debajo de ese elemento de la barra de tabs. Aquí está mi código:

 let view = ordenetworkingTabBarItemViews()[selectedIndex] bottomIcon.frame = CGRect(x: 0, y: 42, width: 10, height: 3) bottomIcon.center = CGPoint(x: view.bounds.size.width / 2, y: view.bounds.size.height / 2) bottomIcon.backgroundColor = UIColor.white bottomIcon.layer.cornerRadius = 2 view.addSubview(bottomIcon) 

La function ordenetworkingTabBarItemViews() obtiene el TabBarItem s como una matriz de UIView s. Aquí hay una image de lo que bash lograr

No creo que haya una forma útil de agregar y mostrar / ocultar una vista.

Te sugiero que hagas esto usando UIImage s – entonces uno con punto para estado seleccionado y otro sin punto para estado no seleccionado.

Hay varias opciones:

  1. Agréguelo como parte de la image seleccionada. Esa es la solución más simple.

  2. como label de pestaña (por ejemplo, usando - carácter o algún mejor carácter unicode, por ejemplo, o ) con una fuente grande.

  3. UITabBar como superposition a UITabBar .

Este es un truco rápido que creé con el carácter unicode ⬬:

 extension UITabBarController { func addDotToTabBarItemWith(index: Int,size: CGFloat,color: UIColor, verticalOffset: CGFloat = 1.0) { // set distance from tab bar icons for tabItem in self.viewControllers! { tabItem.tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0.0, vertical: verticalOffset) } // set default appearance for tabbar icon title UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: color,NSFontAttributeName:UIFont(name: "American Typewriter", size: size)!], for: .normal) UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: color,NSFontAttributeName:UIFont(name: "American Typewriter", size: size)!], for: .selected) // place the dot guard let vc = self.viewControllers?[index] else { log.error("Couldn't find a TabBar Controller with index:\(index)") return } vc.tabBarItem.title = "⬬" } }