leftbarbuttonitem does not show up in the navigati

2019-06-15 07:38发布

问题:

I've been developing an iOS app and have been having issues with using an image as the left bar button item in the navigation bar. I have attempted this in the following ways:

UIImage *backButtonImage = [UIImage imageNamed:@"backbuttonCB"];
CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
UIButton *backButton = [[UIButton alloc] initWithFrame:buttonFrame];
[backButton setImage:backButtonImage forState:UIControlStateNormal];
UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton];
self.navigationItem.leftBarButtonItem = backBarButtonItem;

The bar button never seems to display while running the app.

I then proceeded to try this other method as follows.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backbuttonCB"] style:UIBarButtonItemStylePlain target:nil action:@selector(methodname)];

This method actually worked. However, the image displayed was tinted blue and did not look like it was meant to. Changing the tint colour of this image did not help.

Any idea how I can solve this problem?

EDIT: More information, if it helps. This is the first view in the navigation stack. The navigation stack is displayed modally i.e. there is a previous view controller and there is a modal segue between the previous view controller and the navigation controller. This is the first view in the navigation stack.

EDIT: THE PROBLEM IS FIXED. I think it was a bug in xcode because when I restarted xcode and tested it with an actual device instead of the emulator, it worked fine. However, still doesn't seem to work on an emulator.

回答1:

Try setting your leftBarButtonItem this way. While presenting modally it doesn't shows up.

self.navigationController?.navigationBar.topItem.leftBarButtonItem =



回答2:

Calling myButton.sizeToFit() before assigning to leftBarButtonItem helped me.

    let cancelButton = UIButton()
    cancelButton.backgroundColor = .red
    cancelButton.setTitle("Common/Cancel".localized, for: .normal)
    cancelButton.sizeToFit() //!!!
    let cancelBarButton = UIBarButtonItem(customView: cancelButton)
    navigationItem.leftBarButtonItem = cancelBarButton


回答3:

Try to use this code,

self.navigationItem.hidesBackButton=YES;

UIImage *buttonImage = [UIImage imageNamed:@"Back"];
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame = CGRectMake(0.0,0.0,buttonImage.size.width,buttonImage.size.height);
[aButton addTarget:self action:@selector(backBtnTapped) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:aButton];
self.navigationItem.leftBarButtonItem = backButton; 


回答4:

I had the same problem. To see the button, I had to change the tint color, here's the code in Swift:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(image:UIImage.init(named: "btn_back_default")!, style:UIBarButtonItemStyle.Plain, target: self, action: Selector("back"))
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()


回答5:

Replace your code to initialize the button as a customType like this:

UIImage *backButtonImage = [UIImage imageNamed:@"backButtonCB"];
    CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [backButton setFrame:buttonFrame];
    [backButton setImage:backButtonImage forState:UIControlStateNormal];
    UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton];
    self.navigationItem.leftBarButtonItem = backBarButtonItem;

Hope it helps....:)



回答6:

Add a Navigation Item to the Views storyboard and create an outlet for it in the ViewController. Then, use your outlet instead of self.navigationController?.navigationItem to reference leftBarButtonItem.