Restore default navigation bar appearance

大憨熊 提交于 2020-01-11 08:28:23

问题


I'm making an iOS app for iPhone, and I'm using a navigation controller. At some point during the navigation, I'm adding a UISegmentedControl to a view controller, just under the navigation bar from the navigation controller. I'm inserting new background and shadow images in the navigation bar, to make the UISegmentedControl appear as part of the navigation bar. I do it like this:

    // 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

When I navigate away from that given view controller, the navigation bars background is still changed.

How can I restore the navigation bars appearance?

Or...

Is there another way embed the UISegmentedControl into an expanded navigation bar?

Image of navigation bar with custom background and Segmented Control below:

When navigating back, the navigation bar cuntinues to be custom:

EDIT:

In a view controller before i change the background images, i try to safe the standart image:

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
    }
}

Both herp and derp are nil after being set, dispite the navigationbar is visible at this momont. How come?


回答1:


You should be able to get the default appearance back just by setting the background image and shadow image to nil.




回答2:


With iOS 11.* and Swift 4, you need to set the barTintColor to nil.

navigationController?.navigationBar.barTintColor = nil


来源:https://stackoverflow.com/questions/34141366/restore-default-navigation-bar-appearance

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!