Создайте пользовательский контроллер UITabBar и выделите выбранную вкладку разделителем - PullRequest
0 голосов
/ 17 сентября 2018

Пожалуйста, найдите скриншот ниже и их спецификацию для панели вкладок.

  1. Отображение радиуса угла только в верхнем левом углу и нанесение тени на него.
  2. Применить кривую к верхнему правому углу.
  3. Показать выбранную вкладку красным цветом шрифта и показать разделитель внизу.

Как я застрял дляпоследние три дня.

Любая помощь будет оценена.

UITabbar cotroller

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Этого можно добиться, создав настраиваемую панель вкладок и добавив каждый уважающий контроллер представления вкладки, чтобы добавить его как дочерний vc с этими шагами.

  1. создать настраиваемое представление свид (добавить кнопки и разделители как подпредставления).Вы можете получить кривую верхних углов с помощью UIBezierPath или с помощью бинарного изображения, а также управлять поведением кнопок и разделителей, таких как цвет.

  2. Добавление VC первой вкладки при отображении загрузки

        self.add(asChildViewController: firstViewController)
    
  3. И добавить / удалить (показать / скрыть) дочерний контроллер вида, пока на каждую кнопку нажимается вот так

    //MARK: - Add Child View Controller
    
    private func add(asChildViewController viewController: UIViewController) {
    
    // Add Child View Controller
    addChildViewController(viewController)
    
    // Add Child View as Subview
    view.addSubview(viewController.view)
    
    // Configure Child View
    viewController.view.frame = view.bounds
    viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    
    // Notify Child View Controller
    viewController.didMove(toParentViewController: self)
    }
    
    
    
    //MARK: - Remove Child View Controller
    private func remove(asChildViewController viewController: UIViewController) {
    
    // Notify Child View Controller
    viewController.willMove(toParentViewController: nil)
    
    // Remove Child View From Superview
    viewController.view.removeFromSuperview()
    
    // Notify Child View Controller
    viewController.removeFromParentViewController()
    }
    
0 голосов
/ 17 сентября 2018

Введите код в AppDelegate didFinishLaunching метод: -

let tabBarController = self.window!.rootViewController as! UITabBarController
        let tabBar = tabBarController.tabBar

        DispatchQueue.main.async {
            tabBar.selectionIndicatorImage = UIImage().createSelectionIndicatorFill(fillColor:.red, lineColor:.blue,size: CGSize(width:tabBar.frame.width/CGFloat(tabBar.items!.count), height:tabBar.frame.height), lineWidth: 1.0)
            tabBar.unselectedItemTintColor = customColor
        }

и сделайте расширение UIImage

extension UIImage {
    func createSelectionIndicatorFill(fillColor: UIColor,lineColor:UIColor,size: CGSize, lineWidth: CGFloat) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        fillColor.setFill()
        UIRectFill(CGRect(x:0, y:0, width:size.width, height:size.height - lineWidth))

        lineColor.setFill()

        UIRectFill(CGRect(x:0, y:size.height - lineWidth, width:size.width, height:lineWidth))

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }
...