在 UINavigationController 中设置时图像不显示

Posted

技术标签:

【中文标题】在 UINavigationController 中设置时图像不显示【英文标题】:Image not displaying when setting it in the UINavigationController 【发布时间】:2018-01-20 21:53:21 【问题描述】:

我正在尝试构建一个分配给我的导航控制器(在我的故事板中)的 Cocoa Touch 类,以在导航栏的中心显示图像。该应用程序已构建,但未显示图像,我无法弄清楚原因。

class NavBarImg: UINavigationController 


    required init(coder aDecoder: NSCoder)
        super.init(coder: aDecoder)!
        setupView()
    

    func setupView()
        if navigationController == nil 
            return
        

        let image = #imageLiteral(resourceName: "BarTabsNavLogoWhite")
        let imageView = UIImageView(image: image)

        let bannerWidth = navigationBar.frame.size.width
        let bannerHeight = navigationBar.frame.size.height

        let bannerX = bannerWidth / 2 - image.size.width / 2
        let bannerY = bannerHeight / 2 - image.size.height / 2

        imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
        imageView.contentMode = .scaleAspectFit

        self.navigationItem.titleView = imageView  

    

【问题讨论】:

setupView 的第一行没有意义;这段代码是UINavigationController 的子类,所以self 是你的导航控制器 【参考方案1】:

为 UINavigationController 创建一个可可触摸类 > 实现下面的代码 > 将类分配给故事板中的导航控制器。

class NavControllerClass: UINavigationController 

override func viewDidLoad() 
    super.viewDidLoad()
    setupNavigationBar()



func setupNavigationBar()

    let image = #imageLiteral(resourceName: "BarTabsNavLogoWhite")
    let imageView = UIImageView(image: image)
    imageView.frame = navigationBar.frame
    imageView.contentMode = .scaleAspectFit
    navigationBar.addSubview(imageView)



【讨论】:

【参考方案2】:

好吧,你只是在prepareForInterfaceBuilder() 中调用setupView(除非有一些你没有共享的代码),这只是为了在情节提要上预览它。 要在运行应用程序时执行该操作,您还需要在 init?(coder: NSCoder) 中调用它。

【讨论】:

所以我根据您的反馈和上面收到的评论修改了我的代码。但是,当我运行模拟器时,我仍然没有看到图像出现。我的故事板中也有分配给我的导航控制器的类。

以上是关于在 UINavigationController 中设置时图像不显示的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

关闭 UINavigationController 并呈现另一个 UINavigationController

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

UINavigationController 标题和按钮