2017-01-07 10 views
3

У меня есть подкласс UITabBarController, и я хочу добавить маленький белый прямоугольный значок под выбранным значком UITabBarItem. Я использовал UIView, и я получаю TabBarItem в качестве подзаголовка и добавляю представление в качестве подпрограммы к нему. Я делаю это в viewWillAppear, он показывает, но когда я выбираю другую вкладку, она не появляется под этой вкладкой. Вот мой код:Как добавить маленький значок под выбранным значком UITabBarItem в Swift

let view = orderedTabBarItemViews()[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) 

orderedTabBarItemViews() функция получает в TabBarItem сек как массив UIView с. Вот изображение того, что я пытаюсь достичь

ответ

1

Я не думаю, что это удобный способ добавления и показа/скрытия вид.

Я предлагаю вам сделать это, используя UIImage s - поэтому один с точкой для выбранного состояния и другой без точки для не выбранного состояния.

1

Есть несколько вариантов:

  1. Добавьте его в качестве части выбранного изображения. Это самое простое решение.

  2. Добавьте его в качестве вкладки (например, с использованием - характера, или некоторые лучше юникодом характера, например или ) с крупным шрифтом.

  3. Добавить в качестве наложения в UITabBar.

0

Это быстрый хак я создал с помощью юникода характер ⬬:

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 = "⬬" 
    } 
}