我通过添加以下代码的应用程序委托,它的工作原理,但现在即时通讯寻求彻底删除文本后退按钮设置箭头的自定义映像的导航栏。
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];
通常这个调用,用于调整垂直文本位置,这可以根据使用的字体而变化。 这里是正文移动远远不够,它不再返回按钮视图中,并因此被夹入不存在。
我真的不认为这是一个开发商调整文字的偏移,以隐藏它一个很好的做法。
一个清洁的解决办法是只添加到导航控制器的后退按钮一个新的按钮,其标题为空字符串。 你应该在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;
这将导致压入导航堆栈的下一个视图控制器具有由刚图像的后退按钮。
(不过,我要指出的是stretchableImageWithLeftCapWidth:...
。已被弃用,您应该使用resizableImage...
。)
要设置后退按钮的文字,您可以设置一个新的后退按钮,以当前的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进行测试
UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@""
style:UIBarButtonItemStylePlain
target:nil
action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
完美的解决方案在全球范围
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
}