我有一个自定义的 UIBarButtonItem
带有一张图片,它在 iOS 6.1 上运行良好。但是 iOS 7 有一个 tintColor
,它会覆盖我的图片。如果我将 tintColor
设置为 [UIColor clearColor]
,则整个按钮都不会显示。
如何使我的返回按钮在 iOS 7 中像在 iOS 6 中一样显示?请帮忙解决问题。
我有一个自定义的 UIBarButtonItem
带有一张图片,它在 iOS 6.1 上运行良好。但是 iOS 7 有一个 tintColor
,它会覆盖我的图片。如果我将 tintColor
设置为 [UIColor clearColor]
,则整个按钮都不会显示。
如何使我的返回按钮在 iOS 7 中像在 iOS 6 中一样显示?请帮忙解决问题。
您应该使用UINavigationBar上的外观来全局设置自定义返回按钮。
[UINavigationBar appearance].backIndicatorImage = customBackButton;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = customBackButton;
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
,像这样 [[UIImage imageNamed:@"imageName"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
这样它才能显示图片的颜色。 - Scar在iOS7中,尝试像这样设置UIBarButtonItem
:
UIImage *temp = [[UIImage imageNamed:@"theImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:temp style:UIBarButtonItemStyleBordered target:self action:@selector(action)];
这是苹果开发者中心的原始帖子讨论区
如果要同时支持iOS7及以下版本,则需检查 system-version
并设置代码,例如:
UIImage *temp=nil;
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
temp = [UIImage imageNamed:@"btn-back.png"];
}
else
{
temp = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];
}
UIImageRenderingModeAlwaysOriginal
不起作用,我必须检查iOS版本。`UIImage *backImage = nil;if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0){
backImage = [UIImage imageNamed:@"btn-back.png"];
}else{
backImage = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];
}`
- Majid- (void)setCustomNavigationBackButton
{
UIImage *backBtn = [UIImage imageNamed:@"arrow"];
backBtn = [backBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.navigationItem.backBarButtonItem.title=@"";
self.navigationController.navigationBar.backIndicatorImage = backBtn;
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = backBtn;
}
arrow
是您的图片名称。
Swift版本:
var backBtn = UIImage(named: "return_menu")
backBtn = backBtn?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
self.navigationController!.navigationBar.backIndicatorImage = backBtn;
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtn;
可以试试这种方法:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationController.navigationBar.backIndicatorImage = [UIImage imageNamed:@"yourImageName.png"];
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"yourImageName.png"];
这将在全局色调中创建一张图像掩模,从而为您提供自定义的图标。不适用于彩色图像。
UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setFrame:CGRectMake(0,0,30,30)];
refreshButton.userInteractionEnabled = YES;
[refreshButton setImage:[UIImage imageNamed:@"yourimage.jpg"] forState:UIControlStateNormal];
// ASSIGNING THE BUTTON WITH IMAGE TO BACK BAR BUTTON
UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease];
self.navigationItem.leftBarButtonItem = refreshBarButton;
backIndicatorImage
。 - FelixbackIndicatorImage
仅适用于iOS 7。我已经在iOS 6中使用了mask
。`const float colorMask[6] = {222, 255, 222, 255, 222, 255}; UIImage *image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors([[UIImage alloc] init].CGImage, colorMask)];[backButtonItem setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];`
- Majid