我使用外观属性将图像设置为应用程序中所有导航栏后退按钮的背景图像。我在应用程序DidLoad方法中使用以下代码执行此操作。
UIImage *backButton = [UIImage imageNamed:@"btn-nav-back"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
我的问题是,每当出现后退按钮时,由于将上一个视图的名称设置为后退按钮的标题,图像就会被拉伸。是否有系统范围的方法可以阻止设置标题?此外,尝试在实际视图控制器中将后退按钮的标题设置为空白也不起作用:(
[self.navigationItem.backBarButtonItem setTitle:@""];
我找到了实现你想要的方法。
首先使后退图像可调整大小,以便它不会被拉伸到后退按钮的长度:
UIImage* backImage = [[UIImage imageNamed:@"back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 0)];
通过UIAppearance将此图像设置为backButtonBackgroundImage:
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
最后,将标题移出可见区域:
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000) forBarMetrics:UIBarMetricsDefault];
唯一的缺点是,后退按钮的宽度不会改变,因此您的UINavigationBar
标题可能会偏离中心。
UIBarButtonItem *customItem = [[[UIBarButtonItem alloc] initWithCustomView:plainButton] autorelease];
self.navigationItem.leftBarButtonItem = customItem;
[(UIButton*)self.navigationItem.leftBarButtonItem.customView addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];
创建自定义栏按钮项并将其交换为默认的后退按钮。
发现这个问题告诉我不幸的是我不能做我想做的事:(
可以使用UIAppearance来设置UINavigationItem的标题视图吗?
与默认图像相同的外观,您也可以在不使用后栏按钮图像的情况下执行此操作BackBarButton
。只需在导航到其他控制器之前编写以下行:
UIBarButtonItem *backButton = [[[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease];
[[viewcontroller navigationItem] setBackBarButtonItem:backButton];
这将解决您的问题。此外,您将能够根据需要使用另一种barButton
方法更改图像。如果您发现任何问题或正在寻找其他问题,请告诉我。
我绕过它的方法是:
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal)
这适用于 iOS 8。
这是一个旧帖子,但如果我遇到过这篇文章,肯定还有其他人在寻找它。
只是补充斯蒂芬的答案:这使得正常和选定状态的文本为白色。这使得它只有 2 条线,系统范围。但是,图像占用了白色文本的空间,看起来很糟糕。
对于系统范围的后退按钮,您可以使用上面的代码
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Highlighted)
Swift 3.x
在应用程序委托文件
中添加此行 UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)