Прежде всего , я выполнил поиск до того, как опубликовать этот вопрос, но если там есть ответ, он скрыт под миллионами вопросов о том, как удалить по умолчаниюнижняя граница навигационной панели.
Я НЕ хочу удалять нижнюю границу ("тень") навигационной панели.
Я пытаюсьчтобы «оформить» мое приложение обычным способом с использованием внешнего вида прокси.Я могу глобально изменить большинство визуальных атрибутов UINavigationBar с помощью кода, подобного следующему:
let navigationBarProxy = UINavigationBar.appearance()
navigationBarProxy.isTranslucent = false
navigationBarProxy.barTintColor = myBarBackgroundColor
navigationBarProxy.tintColor = myBarTextColor
Что касается нижней границы полосы «волосяной линии» (или, как известно, «тени»), я могу либоустановите значение по умолчанию, ничего не делая или указав nil
:
navigationBarProxy.shadowImage = nil
... или я могу указать пользовательский цвет , назначив сплошное изображение изцвет, который я ищу:
navigationBarProxy.shadowImage = UIImage.withColor(myBorderColor)
(использует вспомогательное расширение:)
extension UIImage {
public static func withColor(_ color: UIColor?, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage? {
let rect = CGRect(origin: CGPoint.zero, size: size)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
let actualColor = color ?? .clear
context?.setFillColor(actualColor.cgColor)
context?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
Однако , подход выше дает мне(на устройствах с сетчаткой) граница 1pt, 2px , тогда как по умолчанию светло-серая граница на самом деле 0.5pt, 1px (она же «линия роста волос»).
Можно ли как-нибудь получить 0,5 пт (1 пкс), пользовательскую нижнюю границу (тень) для UINavigationBar?
Я думаю, я мог бы использовать фоновое изображение, сгенерированное во время выполнения, котороепо большей части сплошная, но имеет границу размером 1 пиксель выбранного цвета, «запеченную» внизу.Но в лучшем случае это выглядит не элегантно, и я не уверен, как это будет работать при изменении высоты панели навигации: изображение нарезано , или просто растянуто, или как?