Как изменить неактивный значок / цвет текста на панели вкладок?
Как я могу изменить неактивный значок/цвет текста на панели вкладок iOS 7? В серый цвет.
18 ответов:
в каждом первом ViewController для каждой панели вкладок:
- (void)viewDidLoad { [super viewDidLoad]; // changing the unselected image color, you should change the selected image // color if you want them to be different self.tabBarItem.selectedImage = [[UIImage imageNamed:@"yourImage_selectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; self.tabBarItem.image = [[UIImage imageNamed:@"yourImage_image"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; }
ключ этого кода- 'UIImageRenderingModeAlwaysOriginal':
режимы рендеринга по документации Apple:
UIImageRenderingModeAutomatic, // Use the default rendering mode for the context where the image is used UIImageRenderingModeAlwaysOriginal, // Always draw the original image, without treating it as a template UIImageRenderingModeAlwaysTemplate, // Always draw the image as a template image, ignoring its color information
изменить цвет текста:
В AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Add this if you only want to change Selected Image color // and/or selected image text [[UITabBar appearance] setTintColor:[UIColor redColor]]; // Add this code to change StateNormal text Color, [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal]; // then if StateSelected should be different, you should add this code [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected]; return YES; }
вы также можете установить свойство
Render As
ваших изображений панели вкладок в вашем каталоге активов напрямую. Здесь у вас есть возможность установить свойствоDefault
,Original Image
иTemplate Image
.
для изменения цвета снять выделение значков на вкладках
Для ниже iOS 10:
// this code need to be placed on home page of tabbar for(UITabBarItem *item in self.tabBarController.tabBar.items) { item.image = [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; }
выше iOS 10:
// this need to be in appdelegate didFinishLaunchingWithOptions [[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];
вместо добавления его в каждый UIViewController, вы можете создать расширение и изменить внешний вид UITabBarController
изменить цвет невыбранного значка
extension UITabBarController { override public func viewDidLoad() { super.viewDidLoad() tabBar.items?.forEach({ (item) -> () in item.image = item.selectedImage?.imageWithColor(UIColor.redColor()).imageWithRenderingMode(.AlwaysOriginal) }) } }
изменить цвет выбранного значка
let tabBarAppearance = UITabBar.appearance() tabBarAppearance.tintColor = UIColor.blackColor()
изменить (un)выбранный цвет заголовка
let tabBarItemApperance = UITabBarItem.appearance() tabBarItemApperance.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Edmondsans-Bold", size: 10)!, NSForegroundColorAttributeName:UIColor.redColor()], forState: UIControlState.Normal) tabBarItemApperance.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Edmondsans-Bold", size: 10)!, NSForegroundColorAttributeName:UIColor.blackColor()], forState: UIControlState.Selected)
расширение UIImage
extension UIImage { func imageWithColor(color1: UIColor) -> UIImage { UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) color1.setFill() let context = UIGraphicsGetCurrentContext() CGContextTranslateCTM(context!, 0, self.size.height) CGContextScaleCTM(context!, 1.0, -1.0); CGContextSetBlendMode(context!, .Normal) let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect CGContextClipToMask(context!, rect, self.CGImage!) CGContextFillRect(context!, rect) let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage UIGraphicsEndImageContext() return newImage } }
новый ответ, чтобы сделать это программно с iOS 10+ С Swift 3, должен использовать
unselectedItemTintColor
API. Например, если вы инициализировали свой контроллер панели вкладок внутри вашегоAppDelegate
, это будет выглядеть следующим образом:func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { ... let firstViewController = VC1() let secondViewController = VC2() let thirdViewController = VC3() let tabBarCtrl = UITabBarController() tabBarCtrl.viewControllers = [firstViewController, secondViewController, thirdViewController] // set the color of the active tab tabBarCtrl.tabBar.tintColor = UIColor.white // set the color of the inactive tabs tabBarCtrl.tabBar.unselectedItemTintColor = UIColor.gray // set the text color ... }
и для установки выбранных и невыбранных цветов текста:
let unselectedItem = [NSForegroundColorAttributeName: UIColor.green] let selectedItem = [NSForegroundColorAttributeName: UIColor.red] self.tabBarItem.setTitleTextAttributes(unselectedItem, for: .normal) self.tabBarItem.setTitleTextAttributes(selectedItem, for: .selected)
в Swift 3.0 вы можете написать его следующим образом
для невыбранного изображения панели вкладок
viewController.tabBarItem.image = UIImage(named: "image")?.withRenderingMode(.alwaysOriginal)
для выбранного изображения панели вкладок
viewController.tabBarItem.selectedImage = UIImage(named: "image")?.withRenderingMode(.alwaysOriginal)
Я думаю, что ответ @anka довольно хорош, и я также добавил следующий код, чтобы включить оттенок цвета для выделенных элементов:
let image = UIImage(named:"tab-account")!.imageWithRenderingMode(.AlwaysTemplate) let item = tabBar.items![IC.const.tab_account] as! UITabBarItem item.selectedImage = image
или в одну строку:
(tabBar.items![IC.const.tab_account] as! UITabBarItem).selectedImage = UIImage(named:"tab-account")!.imageWithRenderingMode(.AlwaysTemplate)
Так выглядит:
вам нужно только поместить этот код в свой первый ViewController, вызванный для TabBarViewController (ViewDidload):
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self loadIconsTabBar]; } -(void) loadIconsTabBar{ UITabBar *tabBar = self.tabBarController.tabBar; // UITabBarItem *firstTab = [tabBar.items objectAtIndex:0]; UITabBarItem *secondTab = [tabBar.items objectAtIndex:1]; firstTab.image = [[UIImage imageNamed:@"icono1.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; firstTab.selectedImage = [[UIImage imageNamed:@"icono1.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; secondTab.image = [[UIImage imageNamed:@"icono2.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; secondTab.selectedImage = [[UIImage imageNamed:@"icono2.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; }
вместо добавления кода изображения рендеринга в каждый viewController для tabBarItem, используйте расширение
extension UITabBar{ func inActiveTintColor() { if let items = items{ for item in items{ item.image = item.image?.withRenderingMode(.alwaysOriginal) item.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.green], for: .normal) item.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .selected) } } } }
затем вызовите это в своем классе UITabBarController как
class CustomTabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() tabBar.inActiveTintColor() } }
вы получите результат : Примечание: не забудьте присвоить класс CustomTabBarViewController на свой TabBarController в раскадровке.
вам нужно только поместить этот код в файле AppDelegate.m called (didFinishLaunchingWithOptions):
[UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateNormal]; [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor orangeColor]} forState:UIControlStateSelected]; [[UITabBar appearance] setTintColor:[UIColor whiteColor]]; // for unselected items that are gray [[UITabBar appearance] setUnselectedItemTintColor:[UIColor whiteColor]];
Если вы ищете решение iOS 11 swift 4, Сделайте что-то подобное в appDelegate. Это меняет все невыбранные на черные.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. UITabBar.appearance().unselectedItemTintColor = UIColor(displayP3Red: 0, green: 0, blue: 0, alpha: 1) return true }
лучший способ изменить цвет выбранного элемента панели вкладок-добавить один код в appdelegate didFinishLaunchingWithOptions метод
UITabBar.appearance().tintColor = UIColor(red: 242/255.0, green: 32/255.0, blue: 80/255.0, alpha: 1.0)
он изменит цвет текста выбранного элемента
вы можете сделать это все через интерфейс builder, проверьте этот ответ, он показывает, как сделать как активный, так и неактивный, "изменить цвет выбранного элемента панели вкладок в раскадровке"
для swift 3:
// both have to declare in view hierarchy method //(i.e: viewdidload, viewwillappear) according to your need. //this one is, when tab bar is selected self.tabBarItem.selectedImage = UIImage.init(named: "iOS")?.withRenderingMode(.alwaysOriginal) // this one is when tab bar is not selected self.tabBarItem.image = UIImage.init(named: "otp")?.withRenderingMode(.alwaysOriginal)