0

在 AppDelegate.m 中为我的自定义导航栏使用它:

UIImage *NavigationPortraitBackground = [[UIImage imageNamed:@"gradient_main"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:NavigationPortraitBackground forBarMetrics:UIBarMetricsDefault];
UIImage *barBackBtnImg = [[UIImage imageNamed:@"btn_nav_default.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:barBackBtnImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

结果是:

在此处输入图像描述

如您所见,该按钮似乎被重复了。按钮尺寸为 61x30。并且文本没有居中。如果文本较短(例如菜单)按钮图像被切断,如果文本较长,则按钮重复。具有较小图标 (30x30) 的按钮也存在类似问题。该按钮显示正常,但我可以单击图像外部的按钮:(

4

2 回答 2

5

您的问题的根源是您提供了一个没有 UIEdgeInsets 并且没有指定调整大小样式的可调整大小的图像。UIBarButtonItem 上的文本实际上是居中的!如果你测量文本两边的距离,你会发现它是一样的。

如果您查看为 UIBarButtonItem 提供的图像:

[[UIImage imageNamed:@"btn_nav_default.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

你告诉 iOS @"btn_nav_default.png" 是一个可调整大小的图像,它应该tile。它基本上是复制您的图像并将它们并排放置,直到覆盖整个宽度。如果您查看UIImage 的文档,您会发现 resizableImageWithCapInsets 的默认行为是平铺。您将需要调用resizableImageWithCapInsets:resizingMode:并传入UIImageResizingModeStretch您的调整大小模式。

话虽如此,这还不够。之后你会看到整个图像被拉伸,完全破坏了你漂亮的圆角。你需要提供 UIEdgeInsets 来告诉 UIImage “你不能拉伸这个部分”。在这种情况下,提供(或类似的东西)将起作用UIEdgeInsetsUIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 10.0f)

如果您对冗长的解释不感兴趣,请复制粘贴此代码(但不保证可以编译...):

[[UIImage imageNamed:@"btn_nav_default.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 10.0f) resizingMode:UIImageResizingModeStretch];
于 2013-04-20T12:11:35.623 回答
0

你可以尝试玩

[[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:5 forBarMetrics:UIBarMetricsDefault]; 

在 ios 5 中放置插图后

于 2013-09-08T14:06:29.180 回答