iOS 7:自定义后退指示图像位置

Man*_*edi 16 uinavigationbar ios ios7

我无法正确设置自定义后退指示图像.指标不居中!

这是一张照片:

屏幕截图显示非居中的自定义后退指示图像

我在didFinishLaunchingWithOptions:方法中设置指标图像......

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

   UIImage *image = [UIImage imageNamed:@"Back"];
   [UINavigationBar appearance].backIndicatorImage = image;
   [UINavigationBar appearance].backIndicatorTransitionMaskImage = image;

   return YES;
}
Run Code Online (Sandbox Code Playgroud)

我该如何居中呢?

ps我已经在iOS 7中读过这个自定义后退指示器图像而不是垂直居中,但实际上它对我不起作用.

car*_*ich 13

 UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 2, 0);
 UIImage *backArrowImage = [[UIImage imageNamed:@"Back"] imageWithAlignmentRectInsets:insets];

 [[UINavigationBar appearance] setBackIndicatorImage:backArrowImage];
 [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backArrowImage];
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于水平定位. (12认同)
  • 这似乎适用于垂直定位,但不适用于水平定位.如何调整水平位置? (11认同)

小智 9

这是因为您只是在UINavigationView中更改后退指示器的图像源,而不是帧.请参阅创建UINavigationView时,后退指示器的框架设置为保持默认iOS 7后退按钮图像的大小.默认的后退按钮图像比您的大,这就是它看起来不对齐的原因.

要解决此问题,您必须重置后退指示器的框架以保持图像的大小.另一种选择是创建具有正确帧大小和图像的UIButton并分配给UIBarButtonItem.然后,您可以使用您创建的新UIBarButtonItem替换UINavigationItem中的backBarButtonItem.

  • 我发现23px是垂直的iOS9.2 (2认同)

小智 5

这就是我使用 Appearance API 处理问题的方式,并且效果很好。当更改 backButtonBackgroundImage 图像会自动在 barButtonItem 上拉伸,因此我们必须使用resizableImageWithCapInsets: 将其调整回原始大小。为了将它放置在 barButtonItem 内,我们然后使用imageWithAlignmentRectInsets在它周围添加大写字母。然后只需使用setBackButtonBackgroundImage:forState:barMetrics分配它。

只需玩数字,你就会找到正确的位置。

int imageSize = 24;
UIImage *barBackBtnImg = [[[UIImage imageNamed:@"backButton"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)] imageWithAlignmentRectInsets:UIEdgeInsetsMake(0, -10, 0, -10)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:barBackBtnImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)