3

我使用外观属性将图像设置为我的应用程序中所有导航栏后退按钮的背景图像。我在 applicationDidLoad 方法中使用以下代码来执行此操作。

UIImage *backButton = [UIImage imageNamed:@"btn-nav-back"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

我的问题是,每当后退按钮出现时,由于前一个视图的名称被设置为后退按钮的标题,图像就会被拉伸。有没有一种系统范围的方法可以停止设置标题?还尝试在实际视图控制器中将后退按钮的标题设置为空白没有效果:(

[self.navigationItem.backBarButtonItem setTitle:@""];
4

7 回答 7

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标题可能会偏离中心。

于 2013-05-27T13:38:42.597 回答
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 并将其交换为默认的后退按钮。

于 2012-08-16T06:11:06.437 回答
1

发现这个问题告诉我不幸的是我不能做我想做的事:(

可以用 UIAppearance 来设置 UINavigationItem 的 titleview 吗?

于 2012-08-16T01:56:23.667 回答
1

如果您需要与默认图像相同的外观,您也可以在不使用后退栏按钮图像的情况下执行此操作BackBarButton。只需在导航到其他控制器之前编写以下行:

  UIBarButtonItem *backButton = [[[UIBarButtonItem alloc]
      initWithTitle:@"Back"
              style:UIBarButtonItemStyleBordered
             target:nil
             action:nil] autorelease];
  [[viewcontroller navigationItem] setBackBarButtonItem:backButton];  

这将解决您的问题。此外,您将能够根据需要使用另一种方法更改图像barButton。如果您发现任何问题或您正在寻找其他问题,请告诉我。

于 2012-08-16T03:50:28.553 回答
1

我绕过它的方法是:

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal)

这适用于 iOS 8。

于 2015-03-11T05:16:20.570 回答
1

我知道这是一个旧帖子,但如果我遇到了这个帖子,一定还有其他人也在寻找它。

只是添加到斯蒂芬的答案:这会使正常和选定状态的文本变为白色。这使得它在系统范围内只有 2 行。但是,图像占用了白色文本的空间,看起来很糟糕。

对于系统范围的后退按钮,您使用上面的代码

UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Highlighted)
于 2015-08-02T04:02:46.120 回答
0

斯威夫特 3.x

在 AppDelegate 文件中添加这一行
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)

于 2017-06-15T09:18:41.573 回答