我阅读了许多主题,但没有一个在最新版本的
Swift的清晰,一致的答案中解决了这个问题.
例如,this question的最佳答案表明UINavigationBar.appearance().setShadowImage().但是,最新版本的swift中不存在这样的方法.
我不想隐藏底部边框.我只是想改变颜色.
另外,能够改变高度会很棒,但我知道我在一个问题上问得太多了.
编辑:我创建了一个2×1像素图像并将其设置为shadowImage,但边框保持不变:
UINavigationBar.appearance().barTintColor = UIColor.whiteColor() UINavigationBar.appearance().shadowImage = UIImage(named: "border.jpg") //in my AppDelegate,for global appearance
这是图像;它真的很小:
解决方法
SWIFT 2.x:
出于方便,我扩展了UIImage()以允许我基本上将它用作下面代码的颜色.
extension UIImage { class func imageWithColor(color: UIColor) -> UIImage { let rect = CGRectMake(0,1.0,0.5) UIGraphicsBeginImageContextWithOptions(rect.size,false,0) color.setFill() UIRectFill(rect) let image: UIImage = UIGraphicsGetimageFromCurrentimageContext() UIGraphicsEndImageContext() return image } }
接下来,您需要在代码中添加以下行,以调整viewController的UINavigationBar的阴影图像或此实例中的颜色.
// Sets Bar's Background Image (Color) // self.navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(UIColor.blueColor()),forBarMetrics: .Default) // Sets Bar's Shadow Image (Color) // self.navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(UIColor.redColor())
SWIFT 3.x / 4.x:
扩展代码:
extension UIImage { class func imageWithColor(color: UIColor) -> UIImage { let rect = CGRect(x: 0.0,y: 0.0,width: 1.0,height: 0.5) UIGraphicsBeginImageContextWithOptions(rect.size,0.0) color.setFill() UIRectFill(rect) let image : UIImage = UIGraphicsGetimageFromCurrentimageContext()! UIGraphicsEndImageContext() return image } }
NavigationBar代码:
// Sets Bar's Background Image (Color) // navigationController?.navigationBar.setBackgroundImage(UIImage.imageWithColor(color: .blue),for: .default) // Sets Bar's Shadow Image (Color) // navigationController?.navigationBar.shadowImage = UIImage.imageWithColor(color: .red)
编辑1:
更新了扩展代码,因此您可以调整rect大小而不更改UIImage颜色不透明度.
编辑2:
添加了Swift 3 Swift 4代码.