替换导航栏中的后退按钮图像会导致两个后退按钮

时间:2018-12-21 07:55:08

标签: ios objective-c

IOS 11.x我正在尝试替换导航栏的后退按钮图像以使用自定义后退箭头。以下代码添加了后退箭头,但它不能代替默认的“ <”箭头,现在我看到一个后退按钮有两张图像。

这是我在视图控制器中的代码,它带有两个后退按钮,可以转到下一个视图。

UIBarButtonItem *backButtonItemWithImage = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backButton"] style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = backButtonItemWithImage;

如果我注释此代码,则后退按钮变为“ <后退”

navigation bar with one back button but two images

请提供有关如何解决此问题的建议。预先感谢。

2 个答案:

答案 0 :(得分:0)

self.navigationController.navigationBar.backIndicatorImage = [UIImage imageNamed:@"Image"];
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"Image"];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

答案 1 :(得分:0)

我在这里的另一个SO帖子中找到了解决方案- how to set image on default back button of navigation bar

这归功于@Badal Shah。

在应用程序委托中。m替换一次后退按钮的图像,现在在整个应用程序中,后退按钮将使用您的自定义图像,而不是默认的'<'

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self customBackButtonForNavigationBar];
}

-(void)customBackButtonForNavigationBar {
        //int imageSize = 20;
    UIImage *myImage = [UIImage imageNamed:@"backButton"]; //set your backbutton imagename
    UIImage *backButtonImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        // now use the new backButtomImage
    [[UINavigationBar appearance] setBackIndicatorImage:backButtonImage];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage];

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0)
                                                         forBarMetrics:UIBarMetricsDefault];

}

现在,如果要删除后退按钮的标题,则可以执行以下常规代码:

UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButtonItem;

这将确保您的后退按钮仅包含您设置的图像,而没有标题。