在AppDelegate.m中使用它来获取我自定义的NavBar:
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)的按钮也存在类似问题。按钮显示正常,但我可以点击图像外的按钮:(
答案 0 :(得分:5)
问题的根源在于您提供的是不带UIEdgeInsets的可调整大小的图像,并且未指定调整大小样式。 UIBarButtonItem上的文本实际上是居中的!如果你测量文本两边的距离,你会发现它是一样的。
如果您查看为UIBarButtonItem提供的图像:
[[UIImage imageNamed:@"btn_nav_default.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
你告诉iOS @“btn_nav_default.png”是一个可调整大小的图像,它应该平铺。它基本上是复制您的图像并将它们并排放置,直到覆盖整个宽度。如果查看UIImage's Documentation,您会看到resizableImageWithCapInsets的默认行为是tile。您需要致电resizableImageWithCapInsets:resizingMode:
并传递UIImageResizingModeStretch
以进行调整大小模式。
话虽如此,这还不够。之后你会看到整个图像被拉伸,完全摧毁你漂亮的圆角。您需要提供UIEdgeInsets,告诉UIImage“您无法延伸此部分”。在这种情况下,提供UIEdgeInsets
UIEdgeInsetsMake(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];
答案 1 :(得分:0)
您可以尝试使用
[[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:5 forBarMetrics:UIBarMetricsDefault];
放入插图后,在ios 5中