swift2 未显示左侧和顶部的导航项

mzillmmw  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(208)

我有一个从标签栏控制器调用的视图,我想在其中有一个leftBarButtonItem、一个带徽标的topItem和一个rightBarButtonItem。
在第一个视图中,我成功地得到了带有徽标的topItem和rightBarButtonItem,但是不可能得到leftBarButtonItem,无论是通过编程还是在故事板中拖动它。我不明白为什么。下面是代码。

private func setNavBarItems() {

    self.navigationItem.leftBarButtonItem?.image = UIImage(named: "empty-photo-red")

    if let navigationBar = self.navigationController?.navigationBar as? SeetyNavigationBar {
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
        imageView.contentMode = .ScaleAspectFit
        let image = UIImage(named: "logo-trans")
        imageView.image = image
        navigationBar.topItem?.titleView = imageView
    }

    self.navigationItem.rightBarButtonItem!.image = UIImage(named: "FAQ")
}

如果我用“!”打开leftBarButton,应用程序会崩溃,所以我猜没有leftBarButton,但为什么呢?
当我从这个视图转到下一个视图时,我得到了leftBarButtonItem和rightBarButtonItem,并且topItem的徽标消失了。

**EDIT:**对于正在消失的topItem:self.navigationItem.titleView = imageView而不是navigationBar.topItem?.titleView = imageView解决了问题。

3duebb1j

3duebb1j1#

似乎您没有创建任何按钮,在设置图像之前,您必须创建按钮。同样,对于在进入第二个屏幕后消失的图像,有两个选项,您有您的选项卡栏控制器,在它下面,您有两个视图链接到您的选项卡栏控制器,从那里:

  • 你把标签栏控制器嵌入到导航控制器中(顺便说一句,这不是你的方法),所以要把你的按钮,你必须把它们放在父控制器上,比如这样
// adding right button
let changeLocButton =  UIBarButtonItem()
changeLocButton.title = "/!\\"
changeLocButton.action = "AnnotationsStatus:"
changeLocButton.target = self
self.parentViewController?.navigationItem.setRightBarButtonItem(changeLocButton, animated: false)
  • 您将两个视图中的每一个都嵌入到了导航控制器中,因此必须为每个视图创建按钮。
// adding right button
let changeLocButton =  UIBarButtonItem()
changeLocButton.title = "/!\\"
changeLocButton.action = "AnnotationsStatus:"
changeLocButton.target = self
self.navigationItem.setRightBarButtonItem(changeLocButton, animated: false)

对于你的图像也是一样的情况1:

if let navigationBar = self.parentViewController?navigationController?.navigationBar as? SeetyNavigationBar
  • 情况2:只需复制粘贴第二个视图控制器中带有导航栏的代码
tjrkku2a

tjrkku2a2#

雨燕4.0

let btnBack = UIButton(type: .custom)
btnBack.bounds = CGRect(x: 0, y: 0, width: 44, height: 44)
btnBack.addTarget(self, action: #selector(self.backButtonAction(sender:)), for: .touchUpInside)
btnBack.setImage(#imageLiteral(resourceName: "back_image"), for: .normal)

let leftBarButton = UIBarButtonItem(customView: btnBack)
self.navigationItem.setLeftBarButton(leftBarButton, animated: true)

//后退按钮动作

@objc func backButtonAction(sender: UIButton) {
self.navigationController?.popViewController(animated: true)
}

相关问题