我已使用外观属性将图像设置为我的应用中所有导航栏后退按钮的背景图像。我使用applicationDidLoad方法中的以下代码来完成它。
UIImage *backButton = [UIImage imageNamed:@"btn-nav-back"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
我的问题是,只要后退按钮出现,图像就会被拉伸,因为前一个视图的名称被设置为后退按钮的标题。是否有系统范围的方法我可以停止设置标题?同时尝试在实际视图控制器中将后退按钮的标题设置为空白无效:(
[self.navigationItem.backBarButtonItem setTitle:@""];
答案 0 :(得分:9)
我找到了达到你想要的方法。
首先使你的背部图像可以调整大小,这样它就不会被拉伸到后退按钮的长度:
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];
唯一的缺点是,backButton的宽度没有改变,因此你的UINavigationBar
标题可能偏离中心。
答案 1 :(得分:2)
UIBarButtonItem *customItem = [[[UIBarButtonItem alloc] initWithCustomView:plainButton] autorelease];
self.navigationItem.leftBarButtonItem = customItem;
[(UIButton*)self.navigationItem.leftBarButtonItem.customView addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];
创建一个自定义barButtonItem并将其替换为默认的后退按钮。
答案 2 :(得分:1)
发现这个问题告诉我不幸的是我不能做我想做的事:(
Can you use UIAppearance to set the titleview of UINavigationItem?
答案 3 :(得分:1)
如果您需要与默认BackBarButton
图像相同的外观,也可以在不使用后边栏按钮图像的情况下执行此操作。在导航到其他控制器之前,只需编写以下行:
UIBarButtonItem *backButton = [[[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease];
[[viewcontroller navigationItem] setBackBarButtonItem:backButton];
这将解决您的问题。此外,您还可以使用barButton
的其他方法根据需要更改图像。
如果您发现任何问题或者您正在寻找其他问题,请告诉我。
答案 4 :(得分:1)
我解决它的方式是:
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal)
这适用于iOS 8。
答案 5 :(得分:1)
我知道这是一个老帖子,但如果我遇到过这个帖子,那么肯定有其他人也在寻找它。
只是添加到Stephen的答案:这使得文本白色为Normal和Selected状态。这使它在系统范围内只有2行。但是,图像占用了白色文本的空间,看起来非常糟糕。
对于系统范围的后退按钮,您可以使用上面的代码
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Highlighted)
答案 6 :(得分:0)
Swift 3.x
在AppDelegate文件中添加此行
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)