IOS 7 UIBarButton назад кнопка стрелка цвет
Я пытаюсь изменить кнопку со стрелкой назад
![enter image description here]()
В настоящее время я использую следующие элементы для управления размером текста, а также цветом текста на кнопке "Назад":
[[UIBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
[UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
[UIColor darkGrayColor], UITextAttributeTextShadowColor,
[NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
nil] forState:UIControlStateNormal];
но если я хочу изменить только цвет стрелки для кнопки "Назад", что мне делать?
Ответы
Ответ 1
Чтобы изменить задний цвет шеврона кнопки для конкретного контроллера навигации *:
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
* Если вы используете приложение с более чем 1 контроллером навигации, и вы хотите, чтобы этот цвет chevron применялся к каждому из них, вы можете использовать прокси-сервер внешнего вида для установки кнопки chevron на задней панели для каждого контроллера навигации следующим образом:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
И для хорошей меры, в быстрой (спасибо Джей Маю в комментариях):
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
Ответ 2
Вы должны установить tintColor всего приложения.
self.window.tintColor = [UIColor redColor];
Или в Swift 3:
self.window?.tintColor = UIColor.blue
Источник: Руководство по переходу на iOS 7 для пользователей
Ответ 3
Вы можете установить цвет на всей панели навигации приложения, используя метод
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}
Ответ 4
На этом пути можно изменить только цвет стрелки (без цвета названия кнопки):
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];
Навигационная панель содержит subview типа _UINavigationBarBackIndicatorView (последний элемент в массиве subviews), который представляет стрелку.
Результат панель навигации с разными цветами кнопки "Назад" и "Назад" .
Ответ 5
Если вы используете раскадровку, вы можете установить цвет оттенка панели навигации.
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 6
Внутри rootViewController, который инициализирует navigationController, я помещаю этот код в свой метод viewDidAppear:
//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];
Ответ 7
В iOS 6 tintColor окрашивает фон в панели навигации, панели вкладок, панели инструментов, строки поиска и полосы видимости. Чтобы подкрасить фоновый фон в iOS 7, вместо этого используйте свойство barTintColor.
iOS 7 Ресурсы разработки Руководство по переходу на интерфейс iOS 7
Ответ 8
Вы можете установить свойство tintColor
на кнопке (или в элементе панели) или в представлении контроллера вида. По умолчанию свойство наследует оттенок от родительского представления, вплоть до верхнего уровня UIWindow
вашего приложения.
Ответ 9
Мне пришлось использовать оба:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil]
forState:UIControlStateNormal];
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];
И работает для меня, спасибо вам всем!
Ответ 10
UINavigationBar *nbar = self.navigationController.navigationBar;
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
//iOS 7
nbar.barTintColor = [UIColor blueColor]; // bar color
//or custom color
//[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
nbar.navigationBar.translucent = NO;
nbar.tintColor = [UIColor blueColor]; //bar button item color
} else {
//ios 4,5,6
nbar.tintColor = [UIColor whiteColor];
//or custom color
//[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
Ответ 11
Чтобы изменить цвет NavigationBar
, вы можете установить цвет оттенка, как показано ниже.
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Ответ 12
Если вы создаете пользовательскую кнопку возврата на основе UIButton с изображением стрелки, вот фрагмент подкласса.
Используя его, вы можете создать кнопку в коде или просто назначить класс в Interface Builder любому UIButton.
Обратное стрелочное изображение будет добавлено автоматически и окрашено в цвет текста.
@interface UIImage (TintColor)
- (UIImage *)imageWithOverlayColor:(UIColor *)color;
@end
@implementation UIImage (TintColor)
- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);
if (UIGraphicsBeginImageContextWithOptions) {
CGFloat imageScale = 1.0f;
if ([self respondsToSelector:@selector(scale)])
imageScale = self.scale;
UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
}
else {
UIGraphicsBeginImageContext(self.size);
}
[self drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeSourceIn);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
#import "iOS7backButton.h"
@implementation iOS7BackButton
-(void)awakeFromNib
{
[super awakeFromNib];
BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor];
[self setImage:backBtnImage forState:UIControlStateNormal];
[self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
[self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
}
+ (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color {
BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color];
[backBtn setImage:backBtnImage forState:UIControlStateNormal];
[backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)];
[backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
[backBtn setTitle:btnTitle forState:UIControlStateNormal];
[backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal];
return backBtn;
}
@end
![back button image@2x]()
Ответ 13
Если вы хотите изменить только стрелку Back Arrow для всего приложения, сделайте следующее:
[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance]
setTintColor:[UIColor colorWithHexString: @"#f00000"]];
Ответ 14
В iOS 7 вы можете поместить следующую строку кода внутри application:didFinishLaunchingWithOptions:
в ваш файл AppDelegate.m
:
[[UINavigationBar appearance] setTintColor:myColor];
Установите myColor
цвет, который вы хотите, чтобы кнопка "Назад" находилась на протяжении всего приложения. Не нужно помещать его в каждый файл.
Ответ 15
Swift 2.0: Панель навигации и кнопки раскраски
navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Ответ 16
В быстрой 3, чтобы изменить цвет стрелки кнопки UIBarButton
self.navigationController?.navigationBar.tintColor = UIColor.black
Ответ 17
Обновить Swift 3
navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blue]
Результат:
![введите описание изображения здесь]()