在Swift中设置navigationBar背景图片

15

以下的代码对我来说无法正常工作,有人能帮忙找出问题吗?

var image = UIImage(named: "10384605_10152519403846670_5189785375955620548_n.jpg") as UIImage

self.navigationController.navigationBar.setBackgroundImage(image , forBarMetrics:UIBarMetrics)
10个回答

36
self.navigationController.navigationBar.setBackgroundImage(image, 
                                                   forBarMetrics: .Default)

如何为返回按钮设置图像? - benLIVE
1
它不再工作了吗?我正在尝试在iOS 12和Xcode 10上使用此代码,但它不起作用。图像仅显示一秒钟,然后NavigationBar变成纯白色,没有分隔线和阴影... - Philipp Rosengart
对于Swift 4.2 => self.navigationController!.navigationBar.setBackgroundImage(UIImage(named: ""), for: .default) - Anurag Sharma

16

在AppDelegate.swift中

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    //Image Background Navigation Bar
    let navBackgroundImage:UIImage! = UIImage(named: "backgroundNB.png")
    UINavigationBar.appearance().setBackgroundImage(navBackgroundImage, forBarMetrics: .Default)

    return true
}

14

Swift 3 中:

如果你想要在背景中添加重复的图像,可以在 AppDelegate > didFinishLaunchingWithOptions: 中进行此调用。

let image = UIImage(named: "imageNameInAsset")
UINavigationBar.appearance().setBackgroundImage(image, for: .default)

如果您想将图像添加到导航栏中心,您需要在ViewController > viewWillAppear: 中进行操作。

let titleView = UIImageView(image: UIImage(named: "imageNameInAsset"))
self.navigationItem.titleView = titleView

9

如果您想在导航栏中填充图像,只需使用以下代码:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "your_Background_Image_Name")?.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), for: .default)

3
let navBackgroundImage:UIImage! = UIImage(named: "navbar_bg")

[UINavigationBar .appearance().setBackgroundImage(navBackgroundImage, forBarMetrics:.Default)]

1
仅提供代码的答案往往被认为是低质量的。您能否编辑您的答案并添加解释,说明如何解决这个问题? - Dijkgraaf

3

针对 Swift 3:

在 AppDelegate.swift 文件中:

UINavigationBar.appearance().setBackgroundImage(UIImage(named:"pattern.png"),
                                                                for: .default)

或者

在viewDidLoad()方法中:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(named:"pattern.png"),
     for: .default)

2

在导航控制器中设置背景图片

self.navigationController?.navigationBar .setBackgroundImage(UIImage(named: "cricket"), for: .default)

1
如果您将应用程序的导航栏隐藏,您需要在视图加载或出现时显示它:
    override func viewWillAppear(_ animated: Bool) {
    print("\n Debugger : View will appear called")
    self.navigationController?.isNavigationBarHidden =  false
}

如果您想让导航栏仅在特定的视图控制器中显示,您需要通过以下方式隐藏导航栏:
override func viewDidDisappear(_ animated: Bool) {
    print("\n Debugger : View did disapper called")

     self.navigationController?.isNavigationBarHidden =  true
}

导航栏设置方法
private func navigationBarSetup(){

    print("\n Debugger : Navigation Bar setup method called")

    self.navigationController!.navigationBar.setBackgroundImage(UIImage(named: "your image name "), for: .default)
    let backButton = UIBarButtonItem(image: UIImage(named: "your Image name"), style: .plain, target: self, action: #selector(Your selector method))
    backButton.tintColor = UIColor.white
    self.navigationItem.leftBarButtonItem = backButton
    let rightButton = UIBarButtonItem(image: UIImage(named: "your Image name"), style: .plain, target: self, action: #selector(Your selector method))
    backButton.tintColor = UIColor.white
    self.navigationItem.rightBarButtonItem = rightButton

}

0

@benLIVE 问如何制作返回按钮,当我找到被接受的答案时,我正在做这个,所以我想我也会把这个留在这里(虽然有点晚),因为如果你要替换导航栏图标,你可能也要替换所有的图标!

    let cubeIcon = UIImageView(image: yourImage)
    cubeIcon.contentMode = .scaleAspectFit
    self.navigationItem.backBarButtonItem?.image = cubeIcon.image

0
请将以下代码添加到AppDelegate.swift文件中的didFinishLaunchingWithOptions方法中:
    if let myImage = UIImage(named: "navBarImage.jpg"){
        UINavigationBar.appearance().setBackgroundImage(myImage, for: .default)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接