恢复默认导航栏外观

时间:2015-12-07 19:15:22

标签: ios swift uinavigationcontroller uinavigationbar

我正在为iPhone制作iOS应用程序,而我正在使用导航控制器。在导航过程中的某个时刻,我将UISegmentedControl添加到视图控制器,就在导航控制器的导航栏下方。我在导航栏中插入新的背景和阴影图像,以使UISegmentedControl显示为导航栏的一部分。我是这样做的:

    // nav bar color image
    let rect = CGRectMake(0, 0, view.frame.width, 0.5)          // Used in navBar, size dosn't matter
    UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)
    barBackgroundColor.setFill()
    UIRectFill(rect)
    let navBarBackground = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    // setup navbar
    navigationController!.navigationBar.setBackgroundImage(navBarBackground, forBarMetrics: .Default)
    navigationController!.navigationBar.shadowImage = UIImage()
    navigationController!.navigationBar.tintColor = UIColor.blackColor()
    navigationController!.navigationBar.translucent = false

当我离开给定的视图控制器时,导航栏背景仍然会改变。

如何恢复导航栏外观?

或者...

是否有另一种方法将UISegmentedControl嵌入到展开的导航栏中?

带有自定义背景和分段控制的导航栏图片如下: Navbar with custom background. plus segment control below

导航回来时,导航栏可以自定义: enter image description here

修改

在更改背景图像之前的视图控制器中,我尝试保护标准图像:

override func viewDidAppear(animated: Bool) {

    if sharedVariables.standartNavBarBackgroundImage == nil {
        let herp = navigationController!.navigationBar.backgroundImageForBarMetrics(.Default)
        sharedVariables.standartNavBarBackgroundImage = herp
        let derp = navigationController!.navigationBar.shadowImage
        sharedVariables.standartNavBarShadowImage = derp
    }
}

设置后,herpderp都为nil,在此妈妈处可以看到导航栏。怎么样?

2 个答案:

答案 0 :(得分:30)

只需将背景图像和阴影图像设置为nil,就可以恢复默认外观。

答案 1 :(得分:3)

使用iOS 11. *和Swift 4,您需要将barTintColor设置为nil

navigationController?.navigationBar.barTintColor = nil