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

我设置了一个箭头自定义图像导航栏,通过在应用程序代理中添加以下代码,它的工作原理,但现在我正在寻找完全删除文本的后退button。

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

我只是这样做,为我工作得很好:-)

 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; 

垂直移动文本到目前为止不再出现。 这可以在您的应用程序代理的应用程序启动时完成。

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

通常这个调用是调整垂直文本的位置,可以根据使用的字体而有所不同。 在这里,文本被移动得足够远以至于不再位于后退button视图内,因此被剪切成不存在。

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

一个更清洁的解决scheme是只需向导航控制器后退button添加一个标题为空string的新button。 您应该在viewWillAppear(不是当前的)中的前一个调用视图控制器中添加它:

 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton; 
 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-100.f, 0) forBarMetrics:UIBarMetricsDefault]; 

不要使用外观代理。 相反,对于每个视图控制器,把这个代码放到它的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; 

这将导致下一个视图控制器推到导航堆栈上有一个只包含图像的后退button。

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

要设置一个button文本,你可以在推送或呈现新的button之前,为当前的viewController设置一个新的button,然后显示新的button:

在你当前的viewController(不是新的将显示后退button):

 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]; 

所以,如果你想删除文本,只需使用@""作为新的后退button的标题。

要为整个应用程序设置后退button,请在您的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]; } 

经过iOS9testing

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

完美的解决scheme

 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 }