Изменение цвета панели навигации в Swift
Я использую представление выбора, чтобы позволить пользователю выбрать цветовую тему для всего приложения. Я планирую изменить цвет панели навигации, фон и, возможно, панели вкладок (если это возможно). Я исследовал, как это сделать, но не могу найти быстрых примеров. Может ли кто-нибудь дать мне пример кода, который мне нужно будет использовать для изменения цвета панели навигации и цвета текста панели навигации? (Представление выбора настроено, я просто ищу код, чтобы измените цвета пользовательского интерфейса)
спасибо.
22 ответов:
Панель Навигации:
navigationController?.navigationBar.barTintColor = UIColor.greenзамените greenColor на любой UIColor, который вы хотите, вы также можете использовать RGB, если хотите.
Текст Панели Навигации:
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]замените orangeColor с любым цветом вы любите.
Панель Вкладок:
tabBarController?.tabBar.barTintColor = UIColor.brownТекст Панели Вкладок:
tabBarController?.tabBar.tintColor = UIColor.yellowна последних двух, заменить коричневый цвет и желтый цвет с цветом по вашему выбору.
вот некоторые очень простые настройки внешнего вида, которые вы можете применить в широком приложении:
UINavigationBar.appearance().backgroundColor = UIColor.greenColor() UIBarButtonItem.appearance().tintColor = UIColor.magentaColor() //Since iOS 7.0 UITextAttributeTextColor was replaced by NSForegroundColorAttributeName UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()] UITabBar.appearance().backgroundColor = UIColor.yellowColor();подробнее о
UIAppearanceAPI в Swift вы можете прочитать здесь:https://developer.apple.com/documentation/uikit/uiappearance
UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0) UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]просто вставьте эту строку в
didFinishLaunchingWithOptionsв коде.
внутри AppDelegate, это глобально изменило формат NavBar и удаляет нижнюю строку/границу (которая является проблемной областью для большинства людей), чтобы дать вам то, что я думаю, что вы и другие ищут:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default) UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barTintColor = Style.SELECTED_COLOR UINavigationBar.appearance().translucent = false UINavigationBar.appearance().clipsToBounds = false UINavigationBar.appearance().backgroundColor = Style.SELECTED_COLOR UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }тогда вы можете настроить константы.Свифт file, and contained-это структура стиля с цветами и шрифтами и т. д. Затем вы можете добавить tableView / pickerView в любой ViewController и использовать массив" availableThemes", чтобы разрешить пользователю изменять значении themecolor.
самое прекрасное в этом то, что вы можете использовать одну ссылку во всем своем приложении для каждого цвета, и она будет обновляться на основе выбранной пользователем "темы" , а без нее по умолчанию используется theme1 ():
import Foundation import UIKit struct Style { static let availableThemes = ["Theme 1","Theme 2","Theme 3"] static func loadTheme(){ let defaults = NSUserDefaults.standardUserDefaults() if let name = defaults.stringForKey("Theme"){ // Select the Theme if name == availableThemes[0] { theme1() } if name == availableThemes[1] { theme2() } if name == availableThemes[2] { theme3() } }else{ defaults.setObject(availableThemes[0], forKey: "Theme") theme1() } } // Colors specific to theme - can include multiple colours here for each one static func theme1(){ static var SELECTED_COLOR = UIColor(red:70/255, green: 38/255, blue: 92/255, alpha: 1) } static func theme2(){ static var SELECTED_COLOR = UIColor(red:255/255, green: 255/255, blue: 255/255, alpha: 1) } static func theme3(){ static var SELECTED_COLOR = UIColor(red:90/255, green: 50/255, blue: 120/255, alpha: 1) } ...
обновлено для Swift 3
// setup navBar..... UINavigationBar.appearance().barTintColor = .black UINavigationBar.appearance().tintColor = .white UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white] UINavigationBar.appearance().isTranslucent = falseSwift 4
UINavigationBar.appearance().barTintColor = .black UINavigationBar.appearance().tintColor = .white UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white] UINavigationBar.appearance().isTranslucent = false
чтобы сделать это на раскадровке (Interface Builder Inspector)
С помощью
IBDesignable, мы можем добавить больше опций для инспектора построителя интерфейса дляUINavigationControllerи настроить их на раскадровку. Во-первых, добавьте следующий код в ваш проект.@IBDesignable extension UINavigationController { @IBInspectable var barTintColor: UIColor? { set { guard let uiColor = newValue else { return } navigationBar.barTintColor = uiColor } get { guard let color = navigationBar.barTintColor else { return nil } return color } } }затем просто установите атрибуты для навигационного контроллера на раскадровке.
этот подход может также использоваться для управления цветом навигации бар текст из раскадровки:
@IBInspectable var barTextColor: UIColor? { set { guard let uiColor = newValue else {return} navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: uiColor] } get { guard let textAttributes = navigationBar.titleTextAttributes else { return nil } return textAttributes[NSAttributedStringKey.foregroundColor] as? UIColor } }
используйте API внешнего вида и цвет barTintColor.
UINavigationBar.appearance().barTintColor = UIColor.greenColor()
внешний вид (функция) не всегда работает для меня. Поэтому я предпочитаю создавать объект NC и изменять его атрибуты.
var navBarColor = navigationController!.navigationBar navBarColor.barTintColor = UIColor(red: 255/255.0, green: 0/255.0, blue: 0/255.0, alpha: 100.0/100.0) navBarColor.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]также, если вы хотите добавить изображение вместо просто текста, это тоже работает
var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 70, height: 70)) imageView.contentMode = .ScaleAspectFit var image = UIImage(named: "logo") imageView.image = image navigationItem.titleView = imageView
на Swift 4
вы можете изменить цвет панели навигации. Просто используйте этот ниже фрагмент кода в
viewDidLoad()цвет панели навигации
self.navigationController?.navigationBar.barTintColor = UIColor.whiteЦвет Текста Панели Навигации
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]на iOS 11 большая панель навигации заголовка, вы должны использовать
largeTitleTextAttributesсвойстваself.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]
iOS 8 (swift)
let font: UIFont = UIFont(name: "fontName", size: 17) let color = UIColor.backColor() self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)
Если вы настроили навигационный контроллер, вы можете использовать приведенный выше фрагмент кода. Так что в моем случае, я использовал в качестве следующих частей кода.
Swift 3.0, версия Xcode 8.1
navigationController.navigationBar.barTintColor = UIColor.greenТекст Панели Навигации:
navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]Это очень полезные переговоры.
Swift 4:
отлично работающий код для изменения внешнего вида панели навигации на уровне приложения.
// MARK: Navigation Bar Customisation // To change background colour. UINavigationBar.appearance().barTintColor = .init(red: 23.0/255, green: 197.0/255, blue: 157.0/255, alpha: 1.0) // To change colour of tappable items. UINavigationBar.appearance().tintColor = .white // To apply textAttributes to title i.e. colour, font etc. UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white, .font : UIFont.init(name: "AvenirNext-DemiBold", size: 22.0)!] // To control navigation bar's translucency. UINavigationBar.appearance().isTranslucent = falseУдачи В Кодировании!
В Swift 2
настройки цвета в панели навигации
navigationController?.navigationBar.barTintColor = UIColor.whiteColor()для изменения цвета в пункт панели навигации
navigationController?.navigationBar.tintColor = UIColor.blueColor()или
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]
Swift 3
UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 51/255, green: 90/255, blue: 149/255, alpha: 1)это установит ваш цвет панели навигации, как цвет панели Facebook:)
Swift 3 и Swift 4 совместимый Xcode 9
лучшее решение для этого, чтобы сделать класс для общих навигационных панелей
У меня есть 5 контроллеров, и каждый заголовок контроллера изменяется на оранжевый цвет. Поскольку каждый контроллер имеет 5 навигационных контроллеров, поэтому мне пришлось изменить каждый цвет либо из инспектора, либо из кода.
поэтому я сделал класс вместо того, чтобы менять каждую панель навигации из кода, который я просто назначаю класс и он работал на всех 5 контроллерах с возможностью повторного использования кода. вы просто должны назначить этот класс для каждого контроллера и все.
import UIKit class NabigationBar: UINavigationBar { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commonFeatures() } func commonFeatures() { self.backgroundColor = UIColor.white; UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor:ColorConstants.orangeTextColor] } }
Swift 4, iOS 12 и Xcode 10 обновление
просто поместите одну строку внутри
viewDidLoad()navigationController?.navigationBar.barTintColor = UIColor.red
SWIFT 4-плавный переход (лучшее решение):
Если вы возвращаетесь с навигационного контроллера, и вам нужно установить другой цвет на навигационном контроллере, который вы нажали, вы хотите использовать
override func willMove(toParentViewController parent: UIViewController?) { navigationController?.navigationBar.barTintColor = .white navigationController?.navigationBar.tintColor = Constants.AppColor }вместо того, чтобы поместить его в viewWillAppear, чтобы переход был чище.
iOS 10 Swift 3.0
если вы не против использовать swift фреймворки, то нам UINeraida чтобы изменить фон навигации как
UIColorилиHexColorилиUIImageи измените текст кнопки навигации назад программно, измените полный цвет текста forground.на
UINavigationBarneraida.navigation.background.color.hexColor("54ad00", isTranslucent: false, viewController: self) //Change navigation title, backbutton colour neraida.navigation.foreground.color.uiColor(UIColor.white, viewController: self) //Change navigation back button title programmatically neraida.navigation.foreground.backButtonTitle("Custom Title", ViewController: self) //Apply Background Image to the UINavigationBar neraida.navigation.background.image("background", edge: (0,0,0,0), barMetrics: .default, isTranslucent: false, viewController: self)
Swift 3
простой один лайнер, который вы можете использовать в
ViewDidLoad()//Change Color self.navigationController?.navigationBar.barTintColor = UIColor.red //Change Text Color self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Я должен был сделать
UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barStyle = .Black UINavigationBar.appearance().backgroundColor = UIColor.blueColor()в противном случае цвет фона не изменится
Сначала установите свойство istranslucent панели навигации в false, чтобы получить нужный цвет. Затем измените цвет панели навигации следующим образом:
@IBOutlet var NavigationBar: UINavigationBar! NavigationBar.isTranslucent = false NavigationBar.barTintColor = UIColor (red: 117/255, green: 23/255, blue: 49/255, alpha: 1.0)


Comments