我的导航栏上有问题。
UIBarButtonItem
tintColor
为橙色,但当我出现popover时,barButtonItem
tintColor
会更改为lightGray。导航栏色调颜色为whiteColor。在弹出提示后我需要留下橙色。
有人能帮我吗?谢谢!
编辑1
我做了可选择的barButtonItem,我有UIBarButtonItem的子类:
-(void)setSelected:(BOOL)selected {
_selected = selected;
if (selected) {
self.tintColor = self.selectedColor;
} else {
self.tintColor = self.defaultColor;
}
}
-(id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action defaultColor:(UIColor *)defaultColor {
self = [super initWithImage:image style:style target:target action:action];
if (self) {
self.tintColor = defaultColor;
}
return self;
}
-(id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action defaultColor:(UIColor *)defaultColor {
self = [super initWithTitle:title style:style target:target action:action];
if (self) {
self.tintColor = defaultColor;
}
return self;
}
编辑2
Thanx Warren Burton的回答,解决方案是:
self.navigationController.navigationBar.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
答案 0 :(得分:4)
此行为是iOS 7“正常”。它告诉您的用户该按钮当前不是您的活动UI的一部分。
如果您希望绕过此常规约定,可以继承UIBarButtonItem并覆盖
- (void)tintColorDidChange
只留下一个空实现。
- (void)tintColorDidChange {
//nothing to see here, move along
}
当弹出窗口呈现时,呈现视图会转到tintMode UIViewTintAdjustmentModeDimmed
,因此即使您提供另一种颜色,系统也会使该颜色变为灰色(去饱和?)。
这就是为什么你需要覆盖tintColorDidChange
以阻止发生这种情况。
来自文档...
当此属性的值为UIViewTintAdjustmentModeDimmed时, 修改tintColor属性的值以提供灰色 外观
答案 1 :(得分:0)
我通过在外部编辑器中更改条形按钮系统项目png文件的颜色来解决我的问题,包括该图像到项目并通过
加载它[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIButtonBarTrashBlack"] style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)];
我使用有用的UIKit-Artwork-Extractor找到了内部系统图片。
我使用免费软件GIMP编辑了艺术作品的颜色。
答案 2 :(得分:0)
它确实看起来像一个Apple bug,你应该用bug报告器输入一个bug。也就是说,我可以给你一个相对无痛的解决方法:将此代码添加到RecipetTableViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Recipe Book";
UIBarButtonItem *it = [[UIBarButtonItem alloc] initWithTitle:self.title style:UIBarButtonItemStylePlain target:nil action:NULL];
UIImage * btBack_30 = [[UIImage imageNamed:@"btBack_30"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)];
[it setBackButtonBackgroundImage:btBack_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = it;
}
编辑:如果感兴趣,可以复制此错误,引用它的bug越多,苹果就越有可能修复它:
摘要:在第二次出现按钮之前,为后栏按钮项设置UIBarButtonItem外观代理没有任何影响。
重现步骤:在appDelegate中,在出现任何内容之前,添加以下语句:
UIImage * gradientImage44 = [[UIImage imageNamed:@"navBar_44"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage * gradientImage32 = [[UIImage imageNamed:@"navBar_32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set the background image for all UINavigationBars [[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone];
预期结果:首次按下viewController时,其后退按钮中包含图像。
实际结果:第一次出现时,没有图像。再次按下视图。实际上,当你第一次点击按钮时它会出现,但是当按钮第一次出现时却不会出现。
版本:Xcode 5.0.1,iOS 7.0.3
注意:在导航控制器的根视图控制器中添加它可以使其工作:
-(void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Recipe Book";
UIBarButtonItem *it = [[UIBarButtonItem alloc] initWithTitle:self.title style:UIBarButtonItemStylePlain target:nil action:NULL];
UIImage * btBack_30 = [[UIImage imageNamed:@"btBack_30"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)];
[it setBackButtonBackgroundImage:btBack_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; self.navigationItem.backBarButtonItem = it;
}
快乐编码!!!