UINavigationBar带图案图像的后退按钮

时间:2013-06-03 11:43:47

标签: ios objective-c uinavigationbar

我需要根据设计师的计划创建一个navBar后退按钮。后部按钮有一个图案图像和周边缝合的皮革。

这是:

enter image description here

我的问题是有可能在没有大量麻烦和头痛的情况下创建这个吗?或者如果可能的话,因为后退按钮的宽度不同?

谢谢!

更新

好的,在PartiallyFinite的帮助下,这很容易。如果正确设置UIEdgeInsets,它将保持左侧固定,右侧固定,然后考虑后退按钮的宽度复制图像的中间部分。

这是我用于后退按钮的图像:

enter image description here

这些是我的插图设置。你可以自己尝试一下:

backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(5, 17, 5, 12)];

希望这有助于将来。

5 个答案:

答案 0 :(得分:4)

您需要为按钮提供可伸缩图像,以便它知道如何正确显示它:

UIImage *buttonImage = [[UIImage imageNamed:@"backButtonImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 6)]

您无需对图像本身执行任何特殊操作,但您需要为可调整大小的图像指定适当的边缘插入,以指示图像边缘周围的区域拉伸,如上图所示(该示例显示左侧15个像素和右侧6个插入的插图)。该区域应覆盖箭头和弯曲的右边缘,以便中间区域可以根据需要伸展。 Read the documentation了解有关此方法的更多信息。

更新:默认情况下,图片的可调整大小区域将平铺为新大小,但是如果您想要将其拉伸,则可以使用resizableImageWithCapInsets:resizingMode:并传递{ {1}}实现这种行为。对于你的情况,显然平铺更好,因为它保留了缝合,但对于一些背景图像拉伸是一个更好的解决方案。只是把它放在这里帮助将来看到这个的人。

获得可伸缩图像后,可以使用以下代码更改后退按钮的外观:

UIImageResizingModeStretch

或者,您可以使用以下代码为应用中的所有后退按钮设置此自定义外观:

[myBackButtonItem setBackButtonBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

在您的应用启动时运行此功能,它将影响您应用中的所有后退按钮。

请注意,与其他一些答案所暗示的相反,您不需要手动创建任何后退按钮。如果您创建[[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 并以推荐方式使用它(请阅读in the documentation,则会在您使用推送视图控制器时为您创建导航栏和后退按钮 UINavigationController。如果您使用全局pushViewController:animated:代码段来应用自定义按钮样式,它将自动应用于您拥有的所有后退按钮。

您可以详细了解UIAppearance in the official documentation

网上还有许多教程可以更深入地解释这是如何工作的以及如何做到这一点,这里有一些好的:

答案 1 :(得分:0)

您需要创建自己的BarButtonItem。您无法为系统后退按钮设置图像。

 self.navigationItem.leftBarButtonItem =  [[[UIBarButtonItem alloc] initWithCustomView:buttonWithYourImage] autorelease];

答案 2 :(得分:0)

您可以创建自己的UIBarButtonItem并将其设置为当前视图控制器上导航栏上的leftButtonItem:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"your_image"] style:UIBarButtonItemStyleBordered target:self action:@selector(yourFunction:)];
self.navigationItem.leftBarButtonItem = btn;

答案 3 :(得分:0)

我在Appdelegate.m中使用它来自定义按钮。 (“buttonBack”是图像的名称)。希望它可以帮到你

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
UIImage *barButtonImage = [[UIImage imageNamed:@"buttonBack"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
[[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

return YES;
}

答案 4 :(得分:0)

首先,您需要制作自己的后退按钮..并将该图像设置为后退按钮。

UIBarButtonItem * btn=[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(changed)];

self.navigationItem.leftBarButtonItem=btn;

[btn setImage:[UIImage imageNamed:@"yourimagename"]];


-(void)changed
{


    [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES];

}

尝试这个对你真有帮助......