#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