如何从Xcode中的导航栏上的后退按钮中删除文本?

时间:2013-05-11 20:06:26

标签: ios uinavigationbar back-button

我通过在app delegate中添加以下代码将箭头自定义图像设置为导航栏,它可以工作,但现在我正在寻找完全删除文本的后退按钮。

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

8 个答案:

答案 0 :(得分:9)

只需垂直移动文本,使其不再显示。这可以在您的应用代表中的应用启动时完成。

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

通常此调用用于调整垂直文本位置,该位置可根据使用的字体而变化。这里的文本移动得足够远,以至于它不再位于“后退”按钮视图中,因此被剪切为不存在。

答案 1 :(得分:9)

我真的不认为开发人员调整文本偏移量以隐藏它是一种很好的做法。

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

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

答案 2 :(得分:6)

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

答案 3 :(得分: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;

答案 4 :(得分: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;

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

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

答案 5 :(得分: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测试

答案 6 :(得分:0)

UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@""
                                 style:UIBarButtonItemStylePlain
                                target:nil
                                action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];

答案 7 :(得分:-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
}