Установить цвет разделителя панели навигации для перехода экрана в Swift (iOS 13/14)?

#ios #uinavigationcontroller #uinavigationbar #shadow #uinavigationbarappearance

#iOS #uinavigationcontroller #uinavigationbar #тень #появление панели навигации

Вопрос:

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

Код, который я пробовал:

1)

 navigationController?.navigationBar.shadowImage = ...//some image with an appropriate color
  
 let appearance = UINavigationBarAppearance()
appearance.shadowImage = navBarSeparatorColor.as1ptImage()
navigationController?.navigationBar.scrollEdgeAppearance = appearance
  

Кажется, первый фрагмент кода работает для ios 12, и это все. Ничего не работает для iOS 13 или 14.

Примечание: есть несколько похожих вопросов, но их «решения» не работают для iOS 13, а для iOS 14 вообще нет вопросов.

Ответ №1:

Я думаю, что на iOS 13 вам нужно установить внешний вид объекта внутри navigationBar , например:

 class FirstViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.navigationBar.standardAppearance.shadowColor = .clear
    }

}

class SecondViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.navigationBar.standardAppearance.shadowColor = .red
    }

}
  

Пожалуйста, обратите внимание, что есть и другие появления: compactAppearance и scrollEdgeAppearance . Вместо shadowColor этого вы также можете установить shadowImage .

Комментарии:

1. спасибо, уже пробовал это. Проблема в том, что на iOS 13/14 есть постоянная темная линия. Вы увидите это, если установите shadowColor любой цвет с прозрачностью (например clear )