【问题标题】:Need to set logo in left side of Navigation bar in AppDelegate需要在 AppDelegate 导航栏左侧设置 logo
【发布时间】:2018-03-22 06:57:08
【问题描述】:

我正在做一个快速的项目。我需要在导航栏的左侧显示徽标,并希望在 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)

【问题讨论】:

    标签: ios swift3 swift4


    【解决方案1】:

    您不能在AppDelegate 中设置导航项。导航项是UIViewControllerUINavigationController 的属性,您为每个ViewController 设置UINavigationItem

    如果您想要实现的只是为所有屏幕设置导航标题,请在 viewDidLoadBaseViewController 中将其命名为 BaseViewController n 设置导航项

    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 希望对你有帮助

    【讨论】:

    • 感谢 Sandeep。会尝试但我们不能自定义导航栏以添加徽标图像吗?
    • @ganesh:据我所知,如果没有 navigationItem 实例,您将无法做到这一点,并且每个带有嵌入式导航控制器的 viewController 都有自己的导航项实例,因此您需要为每个导航项设置属性时间。就像向父级添加后退按钮不会导致子 VC(在 parentVC 上按下的那个)有后退按钮不是吗?如果有人在应用程序委托中发布自定义导航栏的方法,我会感到惊讶并且会学到一些新东西。我还会继续学习新的东西:)直到那时我能想到的最好的解决方案是继承:)
    • @ganesh:我在评论中的问题是否正确?你的意思是没有办法全局配置 NavBar 以便正确显示徽标图像吗?如果这就是问题,我的答案将添加为上面的评论,如果不是你的意思,请让我知道
    • 只是想知道是否可以使用自定义导航栏。您的回答很有帮助,而且很有效。谢谢
    • @ganesh : 很高兴它做到了 :) 编码愉快
    【解决方案2】:

    请在设置其框架时更改 logoImageView 的 x 位置。 您将其值设置为 -40 可能是因为您无法看到该 logoImage。 将其 x 位置更改为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2015-07-09
      • 2016-02-11
      • 2015-07-19
      • 1970-01-01
      相关资源
      最近更新 更多