iOS-将图片/容器视图放置在导航栏上方

时间:2019-09-10 19:12:04

标签: ios swift xcode

出于某种设计目的,我需要在导航栏上方放置一个图像。

Apple对不更改导航栏高度非常严格。..我不会去那里。

这是一个很大的应用程序,因此我不必分开更改每个控制器。

我的控制器大多数都出现在导航控制器中,所以我认为扩展UINavigationController可以解决问题(到目前为止)。有人对此有想法吗?

extension UINavigationController {

override open func viewDidLoad() {
    super.viewDidLoad()

    if #available(iOS 11.0, *) {
        // This add space under my nav bar
        self.additionalSafeAreaInsets = UIEdgeInsets(top: 80, left: 0, bottom: 0, right: 0)

        // Need to find a way to move down my nav and add the logo above
    }
}

}

Here a visual of what it is expecting

2 个答案:

答案 0 :(得分:0)

放置图像的最佳方法是在导航标题中:

let logo = UIImage(named: "logo.png")
let imageView = UIImageView(image:logo)
self.navigationItem.titleView = imageView

如果您想要更可定制的内容,建议您使用SafeArea创建一个约束为0的视图。

答案 1 :(得分:0)

在您的xib中添加此视图:

enter image description here

并在您的类中创建您的navigationController,如下所示:

import UIKit

class TopLogoViewController: UIViewController {

    @IBOutlet weak var containerView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let controller = UINavigationController(rootViewController: ViewController())
        controller.navigationBar.backgroundColor = .green
        controller.navigationBar.barTintColor = .green
        controller.navigationBar.shadowImage = UIImage()
        controller.navigationBar.isTranslucent = false

        addChild(controller)
        containerView.addSubview(controller.view)

        controller.view.frame = containerView.bounds
        controller.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        controller.didMove(toParent: self)
    }
}