UITabBar оттенок в iOS 7
Как я могу указать оттенок изображений, когда вкладка выбрана и не выбрана?
Я пробовал это, но он не работает:
[[UITabBar appearance] setTintColor:[UIColor redColor]];
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]];
При этом выбранный оттенок будет красным (не зеленым) и невыбранным оттенком серого (не красным).
Ответы
Ответ 1
Вы можете установить цвет оттенков для выбранных и невыделенных кнопок панели табуляции, например:
[[UIView appearanceWhenContainedIn:[UITabBar class], nil] setTintColor:[UIColor redColor]];
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]];
Первая строка устанавливает невыбранный цвет - красный в этом примере - путем установки tintColor UIView, когда он содержится в панели вкладок. Обратите внимание, что это только устанавливает цвет оттенка невыделенного изображения - он не меняет цвет текста под ним.
Вторая строка устанавливает цвет выделенного оттенка выбранного оттенка на зеленый.
Ответ 2
Используете ли вы шаблонную версию своих изображений?
Вместо настройки изображений с помощью [UIImage imageNamed: @"MyImage"]
установите их с помощью [[UIImage imageNamed: @"MyImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate]
.
Эта настройка вместе с вашим кодом должна решить эту проблему.
Ответ 3
Вы должны использовать новые режимы рендеринга изображений, представленные в iOS 7 (UIImageRenderingModeAlwaysOriginal
и UIImageRenderingModeAlwaysTemplate
), см. мой ответ на аналогичный question:
Надеюсь, что это поможет
Ответ 4
если у вас нет большого количества контроллеров view. Вот мой способ это сделать.
В методе делегата просто разместите свою вкладку bg Image. И установите UIImageView
Создайте UITabbar intance в AppDelegate.h
@property (nonatomic,retain) UITabBar *tabbar;
И
@synthesize tabbar;
UITabBarController *tabBarController =
(UITabBarController *)self.window.rootViewController;
tabbar = [tabBarController tabBar];
[tabbar setBackgroundImage:[UIImage imageNamed:@"tabbarBg.png"]];
NSArray *tabImageArray = [NSArray arrayWithObjects:
[UIImage imageNamed:@"tab1Hover.png"],
[UIImage imageNamed:@"tab2.png"],
[UIImage imageNamed:@"tab3.png"],
[UIImage imageNamed:@"tab4.png"],
[UIImage imageNamed:@"tab5.png"],
nil];
for (int i = 0; i<5; i++) {
UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(20+i*60+i*3.5, 10, 25, 21)];
[image setContentMode:UIViewContentModeScaleAspectFit];
[image setImage:[tabImageArray objectAtIndex:i]];
[image setTag:10+i];
[tabbar addSubview:image];
}
Затем каждый ViewController на вкладке добавляет
-(void)viewWillAppear:(BOOL)animated
делегировать метод и в этом методе. Вы можете изменить изображения, как показано ниже.
-(void)viewWillAppear:(BOOL)animated{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
UITabBarController *tabBarController = (UITabBarController *)appDelegate.window.rootViewController;
NSArray *tabImageArray = [NSArray arrayWithObjects:
[UIImage imageNamed:@"tab1Hover.png"],
[UIImage imageNamed:@"tab2.png"],
[UIImage imageNamed:@"tab3.png"],
[UIImage imageNamed:@"tab4.png"],
[UIImage imageNamed:@"tab5.png"],
nil];
for (int i = 0; i<5; i++) {
UIImageView *image = (UIImageView*)[tabbar viewWithTag:10+i];
[image setImage:[tabImageArray objectAtIndex:i]];
}
}
Итак, просто обходите tabImageArray в каждом контроллере View. Тогда вы можете использовать его.
Я тоже работаю на iOS 7.