需要在 AppDelegate 导航栏左侧设置 logo

Need to set logo in left side of Navigation bar in AppDelegate

我正在开发 swift project.In,我需要将徽标显示在导航栏的左侧,并希望在 AppDelegate 中将其全局显示。但是在 Appdelegate 中没有检测到 self.navigationitem?任何帮助将不胜感激,因为它是我在 swift 中的第一个项目。

     UINavigationBar.appearance().barTintColor = Constants.templatecolor
    let logoImage = UIImage.init(named: "logoImage")
    let logoImageView = UIImageView.init(image: logoImage)
    logoImageView.frame = CGRect(x: -40, y: 0, width: 150, height: 25)
    logoImageView.contentMode = .scaleAspectFit
    let imageItem = UIBarButtonItem.init(customView: logoImageView)
    let negativeSpacer = UIBarButtonItem.init(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
    negativeSpacer.width = -25
    UINavigationItem.setLeftBarButtonItems(negativeSpacer, imageItem)

请在设置框架时更改 logoImageView 的 x 位置。 您将它的值设置为 -40 可能是因为您无法看到该徽标图像。 将它的 x 位置更改为 0.

您无法在 AppDelegate 中设置导航项。导航项是 UIViewControllerUINavigationController 的 属性,并且您为每个 ViewController 设置了 UINavigationItem

如果您想要实现的只是为所有屏幕设置导航标题,请声明一个基础 class 将其称为 BaseViewController n in viewDidLoad of BaseViewController 设置导航项

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let logoImage = UIImage.init(named: "close")
        let logoImageView = UIImageView.init(image: logoImage)
        logoImageView.frame = CGRect(x: -40, y: 0, width: 150, height: 25)
        logoImageView.contentMode = .scaleAspectFit
        let imageItem = UIBarButtonItem.init(customView: logoImageView)
        let negativeSpacer = UIBarButtonItem.init(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
        negativeSpacer.width = -25
        self.navigationItem.leftBarButtonItems = [negativeSpacer,imageItem]
        // Do any additional setup after loading the view.
    }
}

现在您项目中的每个 viewController 都可以从 BaseViewController

扩展
class ViewController: BaseViewController {
  ...
   override func viewDidLoad() {
        super.viewDidLoad()
   }
}

确保在 viewDidLoad 中调用 super.viewDidLoad 希望对你有帮助