我一直在开发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并使用实际设备而不是模拟器进行测试时,它运行正常。但是,仍然似乎无法在模拟器上工作。
答案 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