[ios]setBackButtonBackgroundImage 与怪异外表

发布时间: 2017/3/21 22:49:21
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

使用这中 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];

结果︰

enter image description here

正如你可以看到按钮似乎重复。按钮尺寸是 61 x 30。不居中的文本。 如果文本较短 (例如菜单) 按钮图像被切断,如果文本的长度,然后重复按钮。 类似的问题,有一个小图标 (30 × 30) 的按钮。该按钮显示正常,但可以在外部图像按钮中单击:(

解决方法 1:

你的根源是问题的你正在提供调整大小的图像,没有右四,也没有指定大小调整样式。关于你的 UIBarButtonItem 的案文实际上为中心 !如果你衡量双方文本的距离,你会意识到,它是一样的。

如果你看看你为 UIBarButtonItem 提供的图像︰

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

你告诉 iOS,@"btn_nav_default.png"是调整大小的图像,它应平铺。它基本上是考虑你图像的副本和放置他们肩并肩,直到覆盖的整个宽度。如果你看看UIImage 的文件你会看到为 resizableImageWithCapInsets 的默认行为是平铺。要调用 resizableImageWithCapInsets:resizingMode: ,并通过在 UIImageResizingModeStretch 为您的大小调整模式。

说,这是不够的。那之后,你会看到的是整个图像被拉伸,彻底摧毁你漂亮的圆的角。您需要提供右四告诉 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];
赞助商