leftbarbuttonitem未显示在导航栏中

时间:2015-03-17 06:53:34

标签: ios cocoa-touch uinavigationbar uibarbuttonitem

我一直在开发iOS应用程序,并且在使用图像作为导航栏中的左栏按钮项时遇到了问题。我通过以下方式尝试过这个:

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;

运行应用程序时似乎从不显示条形按钮。

然后我继续尝试以下其他方法。

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

这种方法确实有效。但是,显示的图像是蓝色的,看起来不像它的意思。更改此图像的色调颜色没有帮助。

知道如何解决这个问题吗?

编辑:更多信息,如果它有帮助。 这是导航堆栈中的第一个视图。导航堆栈以模态方式显示,即存在先前的视图控制器,并且在先前的视图控制器和导航控制器之间存在模态segue。这是导航堆栈中的第一个视图。

编辑:问题是固定的。 我认为这是xcode中的一个错误,因为当我重新启动xcode并使用实际设备而不是模拟器进行测试时,它运行正常。但是,仍然似乎无法在模拟器上工作。

8 个答案:

答案 0 :(得分:23)

尝试以这种方式设置leftBarButtonItem。虽然以模态方式呈现但它没有显示出来。

self.navigationController?.navigationBar.topItem.leftBarButtonItem =

答案 1 :(得分:12)

在分配给myButton.sizeToFit()之前致电leftBarButtonItem帮助了我。

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

答案 2 :(得分:6)

尝试使用此代码,

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; 

答案 3 :(得分:4)

我遇到了同样的问题。要查看按钮,我必须更改色调颜色,这里是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()

答案 4 :(得分:0)

替换您的代码,将按钮初始化为customType,如下所示:

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;

希望它有帮助.... :)

答案 5 :(得分:0)

将导航项添加到View故事板,并在ViewController中为其创建出口。然后,使用您的插座而不是self.navigationController?.navigationItem来引用leftBarButtonItem。

答案 6 :(得分:0)

已为Swift 5更新:

let image = UIImage(named: "iconClose")
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(self.cancel))
navigationItem.leftBarButtonItem = button

答案 7 :(得分:0)

对我来说,iOS 13 上的问题是由于使用原生 Apple SF Symbols 作为 UIBarButtonItem 的图像。

我的建议是使用将您的图像添加到资产中,或者如果您更喜欢使用 SF 符号,请使用“#available”选择器在版本 > iOS 14.0 中使用它们,请参阅:

var img: UIImage
var backButton: UIBarButtonItem

if #available(iOS 14.0, *) {
    img = UIImage(systemName: "chevron.backward")!
    backButton = UIBarButtonItem(image: img, style: .plain, target: self, action: #selector(foo))
} else {
    // add your image to the project's assets first and make sure that the name is the same
    img = UIImage(named: "my-custom-image")!
    backButton = UIBarButtonItem(image: img, style: .plain, target: self, action: #selector(foo))
}

self.navigationItem.leftBarButtonItem = backButton