Несовпадающие цвета на UINavigationBar и UISearchBar

#ios #swift #uinavigationbar #uisearchbar

#iOS #swift #uinavigationbar #панель пользовательского поиска

Вопрос:

Проще говоря, у меня возникли проблемы с созданием точно цветных панелей навигации и поиска. Ни один из этих элементов не является прозрачным.Вот скриншот и соответствующий код.

введите описание изображения здесь

Соответствующий код:

     super.viewDidLoad()
    self.navigationController?.isNavigationBarHidden = false

    let navigationBar = navigationController!.navigationBar

    navigationBar.isTranslucent = false

    let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1))
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()!
    context.setFillColor(UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0).cgColor)
    context.fill(rect)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)

    navigationBar.shadowImage = UIImage()

    searchBar.layer.borderWidth = 1
    searchBar.layer.borderColor = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0).cgColor



    tblFriends.delegate = self
    tblFriends.dataSource = self

    tblFriends.register(UINib(nibName: "FriendCell", bundle: nil), forCellReuseIdentifier: "FriendCell")
  

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

Рассматриваемый цвет ДОЛЖЕН быть 86 200 246. Но ни один из элементов таковым не является, и оба они не совпадают. И снова, ни один из элементов не является прозрачным. Что происходит?

Ответ №1:

Я объединил код Джо и свой собственный, чтобы создать рабочее решение для iOS 10.

 let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1))
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()!
context.setFillColor(UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0).cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

//To change Navigation Background colour.
navigationController?.navigationBar.setBackgroundImage(image, for: UIBarPosition.any, barMetrics: UIBarMetrics.default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.barTintColor = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0)

//To change SearchBar Background colour.
self.searchBar.isTranslucent = false
self.searchBar.backgroundImage = image
searchBar.barTintColor = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0)
searchBar.layer.borderColor  = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0).cgColor
  

Ответ №2:

Попробуйте этот код:

     // To Get transparent navigationBar
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarPosition.any, barMetrics: UIBarMetrics.default)

    //To remove black hairline under the Navigationbar
    navigationController?.navigationBar.shadowImage = UIImage()  
    navigationController?.navigationBar.isTranslucent = false

    //To apply your tint background to navigationBar
    navigationController?.navigationBar.barTintColor = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0)

    //To remove border and background colour on searchBar
    self.searchbar.isTranslucent = false
    self.searchbar.backgroundImage = UIImage()

    //To apply border and background colour on searchBar
    searchbar.barTintColor = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0)
    searchbar.layer.borderColor  = UIColor(red: 86.0/255.0, green: 200.0/255.0, blue: 246.0/255.0, alpha: 1.0).cgColor
  

Примечание: Если вы используете панель поиска в качестве заголовка tableview.Возможно, вам потребуется другой подход.дайте мне знать..

Вывод:

введите описание изображения здесь

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

1. Версия iOS может влиять на ситуацию; Я использую iOS10, и приведенный выше код выдает мне бесцветную панель поиска по умолчанию. Удаление «self.SearchBar.BackgroundImage = UIImage()» делает цвет точным, но добавляет черную линию между панелями поиска и навигации.

2. Приведенный выше снимок экрана на самом деле с моего iPhone 6s Plus под управлением iOS 10.0.1. это должно быть что-то другое… Я обновлю свой код с четким описанием… Спасибо

Ответ №3:

Простое решение для iOS 10 (iOS 7 ):

 self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarPosition.any, barMetrics: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = false

self.searchBar.tintColor = UIColor.white
self.searchBar.barTintColor = UIColor(red:0.10, green:0.58, blue:0.84, alpha:1.0)
self.searchBar.layer.borderWidth = 1
self.searchBar.layer.borderColor = UIColor(red:0.10, green:0.58, blue:0.84, alpha:1.0).cgColor
  

Скриншот