2016-10-23 5 views
1

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

enter image description here

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

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") 

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

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

ответ

2

Я комбинировал код Джо и мой собственный, чтобы придумать работающее решением для прошивки 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 
1

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

// 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 

Примечание: Если вы используете SearchBar как Tableview header.You может понадобиться другое approach.let мне знать ..

Выход:

enter image description here

+0

IOS версия может влиять на вещах ; Я нахожусь на iOS10, и приведенный выше код дает мне бесцветную панель поиска по умолчанию. Удаление «self.searchBar.backgroundImage = UIImage()» делает цвет точным, но добавляет черную линию между полосами поиска и навигации. –

+0

Над скриншотом на самом деле с моего iPhone 6s Plus работает iOS 10.0.1 .it должно быть что-то еще ... Я обновлю свой код с четким описанием ... спасибо – Joe

0

Простым решением для прошивки 10 (прошивки 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 

Screenshot