7

我通过在应用程序委托中添加以下代码将箭头自定义图像设置为导航栏,它可以工作,但现在我希望完全删除后退按钮的文本。

UIImage * backButtonImage = [UIImage imageNamed: @"BackButtonGrey.png"];
backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth: 15.0 topCapHeight: 30.0];
[[UIBarButtonItem appearance]  setBackButtonBackgroundImage: backButtonImage  forState: UIControlStateNormal  barMetrics: UIBarMetricsDefault];
4

8 回答 8

9

只需将文本垂直移动到不再出现即可。这可以在应用程序委托中的应用程序启动时完成。

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

通常,此调用用于调整垂直文本位置,该位置可能因使用的字体而异。在这里,文本被移动得足够远,以至于它不再位于后退按钮视图内,因此被剪裁为不存在。

于 2013-07-24T14:49:39.023 回答
9

我真的不认为开发人员调整文本的偏移量以隐藏它是一个好习惯。

一个更简洁的解决方案是在导航控制器的后退按钮中添加一个标题为空字符串的新按钮。您应该在 viewWillAppear 中的前一个调用视图控制器中添加它(不是当前的):

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
于 2014-07-21T14:51:31.260 回答
6
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-100.f, 0) forBarMetrics:UIBarMetricsDefault];
于 2013-10-23T07:20:08.783 回答
5

我就是这样做的,对我来说很好:-)

UIImage *backButtonImage = [UIImage imageNamed:@"navigationBarBack.png"];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];

[backButton setImage:backButtonImage
            forState:UIControlStateNormal];

backButton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);

[backButton addTarget:self
               action:@selector(popViewController)
     forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backBarButtonItem;
于 2013-05-11T20:16:41.383 回答
1

不要使用外观代理。相反,对于每个视图控制器,将以下代码放入其viewDidLoad实现中:

UIImage * backButtonImage = 
    [UIImage imageNamed: @"BackButtonGrey.png"];
backButtonImage = 
    [backButtonImage stretchableImageWithLeftCapWidth: 15.0 topCapHeight: 30.0];

UIBarButtonItem* b =
     [[UIBarButtonItem alloc] 
          initWithImage:backButtonImage
          style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = b;

这将导致下一个压入导航堆栈的视图控制器具有一个仅包含图像的后退按钮。

(但是,我应该指出它stretchableImageWithLeftCapWidth:...已被弃用。您应该使用resizableImage....)

于 2013-05-11T20:54:03.977 回答
1

要设置后退按钮文本,请在按下或呈现新的后退按钮之前为当前 viewController 设置一个新的后退按钮,该新后退按钮将显示后退按钮的文本:

在您当前的 viewController 中(不是显示后退按钮的新视图控制器):

vc                                    = [[MyNewViewController alloc]initWith...];
vc.title                              = @"New ViewController";
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationController pushViewController:vc animated:YES];

因此,如果要删除文本,只需将@""其用作新后退按钮的标题即可。

要为整个应用设置后退按钮图标,请在 appDelegate 类中使用以下代码。并非每个图标都完美契合,因此如果您必须稍微移动它,您可以使用“backInsets”。在我的示例中,图标将向下移动 2px。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    ...
    [self customBackButtonIcon];
    return YES;
}

- (void)customBackButtonIcon
{        
    UIEdgeInsets backInsets = UIEdgeInsetsMake(0, 0, -2, 0);
    UIImage *backImg = [[[UIImage imageNamed:@"back_button_white"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] imageWithAlignmentRectInsets:backInsets];
    [[UINavigationBar appearance] setBackIndicatorImage:backImg];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backImg];
}

用iOS9测试

于 2016-04-06T09:17:56.707 回答
0
UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@""
                                 style:UIBarButtonItemStylePlain
                                target:nil
                                action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
于 2015-09-21T09:22:52.310 回答
-1

全球完美解决方案

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

    return true
}
于 2016-03-31T02:54:26.977 回答