我已经在我的博客上完成了教程,所以我知道如何制作一个可以显示底部(堆栈)视图控制器标题的可拉伸按钮。但我希望做的是有图标(比如 HOME 的房子),没有文字,也没有调整大小。
使用我的自定义图像和下面的代码,我得到了一个标题在顶部(不需要)的拉伸版本(不需要),单击时它会着色/突出显示(很好);
UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
现在,我在这里搜索并阅读了所有返回旧答案的类似问题,并且对我来说有奇怪的结果。这是我尝试过的代码;
UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
此方法不会拉伸我的自定义图像按钮(很好),也不会显示文本(我想要的)但是它下面仍然有原始的蓝色按钮(WTF),并且我的自定义按钮在单击时不会着色,只有它下面的蓝色按钮可以!
请帮忙,我错过了什么?
*更新
我通过使用可调整大小的图像对其进行了一些修复。这迫使它不要“伸展”
UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
要修复按钮上显示的标题,我必须做
self.title =@" ";
现在这是一个有点肮脏的修复,但它似乎正在工作。现在剩下的唯一问题是我想在不同的视图上使用不同的后退按钮,这种方法会造成一些麻烦;设置按钮的最后一个视图覆盖所有其他视图。所以最后,根据您在应用程序中导航的方式,返回上一个视图有错误的后退按钮,并且它永远不会重置为正确的。
更新 2:潜在的想法:
以下是一个合理的解决方案,还是可能破坏某些东西的黑客?
像这样隐藏默认的后退按钮,
[self.navigationItem setHidesBackButton:YES animated:NO];
...然后使用自定义 UIBarButtonItem,在我实际想要放置在后退按钮位置的样式中的按钮,在点击时向 UINavigationController 发送popViewControllerAnimated:消息。
如果您知道更强大的解决方案,请分享,谢谢。