Как добавить строку под панелью навигации в выдвинутом контроллере вида? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть UINavigation Controller, который используется для просмотра или всплывающих окон.В контроллере начального вида я хочу скрыть панель навигации внизу 1 пиксель тени.Итак, вот код для этого.

func setup(){

        if #available(iOS 11.0, *) {
            self.navigationController?.navigationBar.prefersLargeTitles = true
            self.navigationController?.navigationItem.largeTitleDisplayMode = .always
        } else {
            // Fallback on earlier versions
        }

        self.navigationBar.isTranslucent = true


        self.navigationBar.clipsToBounds = true
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()

        self.navigationBar.tintColor = UIColor(hexString: "#373839")
        self.navigationBar.backgroundColor = UIColor.white

    }

Но когда я нажимаю на второй контроллер View, тень навигационной панели скрывается даже в этом.

Влияет ли установка свойств панели навигации в контроллере родительского представления на свойства всех контроллеров, добавленных оттуда?Я думал, что панель навигации специфична для контроллера вида. Контроллер навигации создает новую панель навигации для каждого выдвигаемого вида.

Может ли кто-нибудь помочь мне понять это, и как я могу вернуть тень 1 пиксель на панель навигации только для 1вид.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Добавьте ниже код в ViewController, где вы хотите изменить цвет NavigationBar's Shadow.

func addColorToShadow() {

     self.navigationController?.navigationBar.clipsToBounds = false
     self.navigationController?.navigationBar.shadowImage = UIColor(red: 215/255, green: 215/255, blue: 215/255, alpha: 1.0).image(CGSize(width: self.view.frame.width, height: 1))

}


extension UIColor {
    func image(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
        return UIGraphicsImageRenderer(size: size).image { rendererContext in
            self.setFill()
            rendererContext.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
        }
    }
}

Выход

enter image description here

0 голосов
/ 29 ноября 2018

Я думаю.Когда вы изменяете свойства панели навигации в контроллере навигации, она будет применена ко всем панелям навигации панели просмотра.Так что, возможно, вам придется сбросить свойство вашего бара.Вы пробовали, как показано ниже?

Например:

//In viewWillDisappear
override func viewWillDisappear(_ animated: Bool) {

super.viewWillDisappear(animated)

self.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationBar.shadowImage = nil
}

//In viewWillAppear
override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...