恢复默认导航栏外观
Restore default navigation bar appearance
我正在为 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
嵌入到展开的导航栏中吗?
下方带有自定义背景和分段控件的导航栏图片:
返回时,导航栏继续自定义:
编辑:
在更改背景图像之前,在视图控制器中,我尝试保护标准图像:
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
}
}
herp
和derp
设置后都是nil
,尽管此时导航栏是可见的。怎么来的?
只需将背景图像和阴影图像设置为 nil
,您应该就能恢复默认外观。
使用iOS 11.*和Swift 4,您需要将barTintColor
设置为nil
。
navigationController?.navigationBar.barTintColor = nil
我正在为 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
嵌入到展开的导航栏中吗?
下方带有自定义背景和分段控件的导航栏图片:
返回时,导航栏继续自定义:
编辑:
在更改背景图像之前,在视图控制器中,我尝试保护标准图像:
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
}
}
herp
和derp
设置后都是nil
,尽管此时导航栏是可见的。怎么来的?
只需将背景图像和阴影图像设置为 nil
,您应该就能恢复默认外观。
使用iOS 11.*和Swift 4,您需要将barTintColor
设置为nil
。
navigationController?.navigationBar.barTintColor = nil