小编典典

在Swift中将一行作为选择指示符添加到UITabbarItem

swift

我想使用UITabbarItems底部的粗线作为选择指示器。由于该应用程序必须能在不同手机尺寸上使用,因此我无法将图像用作选择指示器。这就是为什么我认为我必须使用Swift来做到这一点的原因。(该行必须是页面宽度的1/3)。

我尝试使用UITabBarItem.appearance()但没有成功。


阅读 278

收藏
2020-07-07

共1个答案

小编典典

我解决了我的问题。

这个小代码段的功能:

  • 宽度是动态的
  • 它是动画的
  • 它对于将来的功能更具可定制性
        class FirstViewController: UIViewController {

    let rectShape = CAShapeLayer()
    let indicatorHeight: CGFloat = 5
    var indicatorWidth: CGFloat!
    let indicatorBottomMargin: CGFloat = 2
    let indicatorLeftMargin: CGFloat = 2

    override func viewDidLoad() {
        super.viewDidLoad()

        // setup tabbar indicator
        rectShape.fillColor = UIColor.redColor().CGColor
        indicatorWidth = view.bounds.maxX / 2 // count of items
        self.tabBarController!.view.layer.addSublayer(rectShape)
        self.tabBarController?.delegate = self

        // initial position
        updateTabbarIndicatorBySelectedTabIndex(0)
    }

    func updateTabbarIndicatorBySelectedTabIndex(index: Int) -> Void
    {
        let updatedBounds = CGRect( x: CGFloat(index) * (indicatorWidth + indicatorLeftMargin),
                                    y: view.bounds.maxY - indicatorHeight,
                                    width: indicatorWidth - indicatorLeftMargin,
                                    height: indicatorHeight)

        let path = CGPathCreateMutable()
        CGPathAddRect(path, nil, updatedBounds)
        rectShape.path = path
    }
    }

    extension FirstViewController: UITabBarControllerDelegate {

    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
        updateTabbarIndicatorBySelectedTabIndex(tabBarController.selectedIndex)
    }
    }
2020-07-07