如何更改 iOS 上后退按钮的位置?

Posted

技术标签:

【中文标题】如何更改 iOS 上后退按钮的位置?【英文标题】:How do I change the location of the back button on iOS? 【发布时间】:2013-01-24 22:34:05 【问题描述】:

您看到我正在制作一个完全自定义的导航栏,当我创建后退按钮时,它并没有停留在正确的位置,正如您在代码下方看到的那样。

这是我的应用程序代码

- (void)viewDidLoad

    [super viewDidLoad];
    if(self.navigationController.viewControllers.count > 1) 
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    
    [backButton setTitle:@"" forState:UIControlStateNormal];
    [backButton setBackgroundImage:[UIImage imageNamed:@"backButton.png"] forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside];
    backButton.frame = CGRectMake(0.0f, 0.0f, 44.0f, 45.0f);
    UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    
    self.navigationItem.leftBarButtonItem = backButtonItem;

【问题讨论】:

【参考方案1】:

我认为你可以修改 contentEdgeInsets 来确定按钮的位置。

类似这样的:

[backButton setContentEdgeInsets:UIEdgeInsetsMake(5, 0, -5, 0)];

来自UIButton Class Reference

contentEdgeInsets

围绕所有按钮内容的矩形的内边距或外边距。

@property(nonatomic) UIEdgeInsets contentEdgeInsets

讨论使用此属性来调整按钮内容的有效绘图矩形的大小和重新定位。内容包括按钮图像和按钮标题。您可以为四个插图(上、左、下、右)中的每一个指定不同的值。正值会缩小或插入该边缘 - 将其移近按钮的中心。负值扩展或开始该边缘。使用 UIEdgeInsetsMake 函数为此属性构造一个值。默认值为 UIEdgeInsetsZero。

【讨论】:

【参考方案2】:

你可以渲染一个更大的图像,左边有一些间距。

UIImage *origImage = [UIImage imageNamed:@"button-thin-hamburger.png"];
UIGraphicsBeginImageContextWithOptions(CGSizeMake(origImage.size.width + 10, origImage.size.height), NO, 0.0);
[origImage drawInRect:CGRectMake(10, 0, origImage.size.width, origImage.size.height)];
UIImage *buttonImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@""
                                                               style:UIBarButtonItemStylePlain
                                                              target:nil
                                                              action:nil];
self.navigationItem.backBarButtonItem = backButton;

[[UINavigationBar appearance] setBackIndicatorImage:buttonImage];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:buttonImage];

【讨论】:

【参考方案3】:

好吧,你不能改变,你必须隐藏它。

看看这里发布的这个页面:

http://rafaelsteil.com/2011/07/23/crappy-ios-apis-uinavigationcontroller/

Can't change back button title but I can hide it

【讨论】:

虽然这可能从技术上回答问题,it would be preferable 供您在此处总结链接材料。否则,答案可能会因链接失效而失去其用处。 不,我知道如何删除后退按钮的标题,只需更改位置即可。是否可以使用 cgrect【参考方案4】:

你需要先隐藏 NavigationBar...

    [self.navigationController setNavigationBarHidden:YES animated:NO];

然后创建自定义 UIButton..

    UIButton *btn1=[UIButton  buttonWithType:UIButtonTypeCustom];
    [btn1 setFrame:CGRectMake(10, 0, 60, 40)];// Frame u want

    [btn1 setImage:[UIImage imageNamed:@"BT_ipad_P_backbward@2x.png"] forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(Click_backward:) forControlEvents: UIControlEventTouchUpInside];
btn1.tintColor=[UIColor purpleColor];
    [self.view addSubview:btn1];

【讨论】:

嗨,朋友,我使用数组添加了四个导航按钮。它工作正常,但后退指示器按钮隐藏。如何纠正这个问题。

以上是关于如何更改 iOS 上后退按钮的位置?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何使用下一步和后退按钮更改标签 (DetailView)

更改导航栏后退按钮的粗细

如何防止 UINavigationController 更改 pushViewController 上的后退按钮:

如何在 appdelegate 上更改后退按钮的文本

如何更改后退按钮上的文本?

如何在渲染后更改后退按钮上的文本