Как добавить тень и удалить нижнюю линию в NavigationBar глобально? - PullRequest
1 голос
/ 30 мая 2019

Итак, я ищу, как добавить тень в NavigationBar и удалить нижнюю черную линию из NavigationBar? Также, если у меня есть searchBar в NavigationBar, то тень должна идти ниже до панели поиска. Я хочу внести изменения глобально, не внося изменений в каждый viewController.

https://imgur.com/a/8ogGRaf.jpg

Таким образом, я уже заархивировал эти изменения, за исключением добавления тени ниже для контроллера поиска.

  1. Для Тени:

    self.navigationController?.navigationBar.isTranslucent = false
    self.navigationController?.navigationBar.layer.shadowColor = UIColor.black.cgColor
    self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0.0, height: 0.0)
    self.navigationController?.navigationBar.layer.shadowRadius = 7.0
    self.navigationController?.navigationBar.layer.shadowOpacity = 0.2
    
  2. Для удаления нижней планки:

    UINavigationBar.appearance().backIndicatorImage = UIImage(named:"normal")
    UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named:"normal")
    

Это то, что я получаю с поиском Bar

https://imgur.com/a/QQ9yrbE

1 Ответ

0 голосов
/ 30 мая 2019

2.скрыть нижнюю строку

public extension UINavigationBar {

    /// Hide line under navigation bar
    public func hideBottomHairline() {
        let navigationBarImageView = hairlineImageViewInNavigationBar(self)
        navigationBarImageView!.isHidden = true
    }

    ///  Show line under navigation bar
    public func showBottomHairline() {
        let navigationBarImageView = hairlineImageViewInNavigationBar(self)
        navigationBarImageView!.isHidden = false
    }

    fileprivate func hairlineImageViewInNavigationBar(_ view: UIView) -> UIImageView? {
        if view.isKind(of: UIImageView.self) && view.bounds.height <= 1.0 {
            return (view as! UIImageView)
        }
        let subviews = (view.subviews as [UIView])
        for subview: UIView in subviews {
            if let imageView: UIImageView = hairlineImageViewInNavigationBar(subview) {
                return imageView
            }
        }
        return nil
    }   
}
...