2015-06-26 226 views
0

我遇到一些与颜色匹配的问题。导航栏颜色问题

我问过类似这个问题,但我现在有同样的问题。我已经设置透明度为假,并转换这个十六进制颜色的UIColor:

008A2E

的问题是,它仍然是不正确的,应该是什么(数字彩色计给人不同的值)。是否因为颜色被剪切,并且有解决方法吗?

感谢

+0

如果您看到相同的颜色(008A2E)在您的显示器和设备上不同,则可以。这是因为屏幕技术。所以,如果你使用相同的颜色并不重要,在不同的屏幕上它会看起来不同。 – azimov

+0

@gottlieb故事板上的颜色是它应该是的,但在模拟器中它看起来不像应该。已经尝试过重置模拟器。 – dwinnbrown

+0

大声笑,我只是用你的颜色直接在故事板中设置背景颜色(使用“数字彩色仪”我得到了RGB等效:10,122,49)。在构建和运行后,我再测量一次,查看背景颜色,... RGB值为:16,122,35。我认为iOS和OS X使用的是不同的颜色系统,所以你很难获得正确的颜色,除非有人已经有相同的问题并以某种方式解决问题。 – azimov

回答

0

我写到这里对这个问题的延伸,将其保存为迅速类,并导入您的项目。

import Foundation 
import UIKit 

extension UIColor { 
    convenience init(hex: Int, alpha: CGFloat = 1.0) { 
     let red = CGFloat((hex & 0xFF0000) >> 16)/255.0 
     let green = CGFloat((hex & 0xFF00) >> 8)/255.0 
     let blue = CGFloat((hex & 0xFF))/255.0 
     self.init(red:red, green:green, blue:blue, alpha:alpha) 
    } 

    convenience init(rgba: String) { 
     var red: CGFloat = 0.0 
     var green: CGFloat = 0.0 
     var blue: CGFloat = 0.0 
     var alpha: CGFloat = 1.0 

     if rgba.hasPrefix("#") { 
      let index = advance(rgba.startIndex, 1) 
      let hex  = rgba.substringFromIndex(index) 
      let scanner = NSScanner(string: hex) 
      var hexValue: CUnsignedLongLong = 0 
      if scanner.scanHexLongLong(&hexValue) { 
       switch (count(hex)) { 
       case 3: 
        red = CGFloat((hexValue & 0xF00) >> 8)  /15.0 
        green = CGFloat((hexValue & 0x0F0) >> 4)  /15.0 
        blue = CGFloat(hexValue & 0x00F)   /15.0 
       case 4: 
        red = CGFloat((hexValue & 0xF000) >> 12) /15.0 
        green = CGFloat((hexValue & 0x0F00) >> 8) /15.0 
        blue = CGFloat((hexValue & 0x00F0) >> 4) /15.0 
        alpha = CGFloat(hexValue & 0x000F)   /15.0 
       case 6: 
        red = CGFloat((hexValue & 0xFF0000) >> 16) /255.0 
        green = CGFloat((hexValue & 0x00FF00) >> 8) /255.0 
        blue = CGFloat(hexValue & 0x0000FF)   /255.0 
       case 8: 
        red = CGFloat((hexValue & 0xFF000000) >> 24)/255.0 
        green = CGFloat((hexValue & 0x00FF0000) >> 16)/255.0 
        blue = CGFloat((hexValue & 0x0000FF00) >> 8)/255.0 
        alpha = CGFloat(hexValue & 0x000000FF)  /255.0 
       default: 
        print("Invalid RGB string, number of characters after '#' should be either 3, 4, 6 or 8") 
       } 
      } else { 
       println("Scan hex error") 
      } 
     } else { 
      print("Invalid RGB string, missing '#' as prefix") 
     } 
     self.init(red:red, green:green, blue:blue, alpha:alpha) 
    } 
} 

使用

navigationController.navigationBar.barTintColor = UIColor(hex: 0x008A2E, alpha: 1.0) 
+0

我确实尝试过,但它的颜色和以前一样。以前我使用的是一个十六进制的UIColor转换器,而不是你的方法,但他们给出了相同的结果。 – dwinnbrown

+0

我在我的项目中使用了这个扩展,完美地工作 –

+0

嗯奇怪的是,它给出了和以前相同的结果。 – dwinnbrown

0

管理HEX颜色,我发现在的UIColor构造直接利用的最佳途径。

你的这个:

self.navigationController.navigationBar.barTintColor = UIColor(red: 0x00/255, green: 0x8A/255, blue: 0x2E/255, alpha: 1.0) 

我希望帮你。

+0

我在使用这段代码:UINavigationBar.appearance()。barTintColor = UIColor(hex:0x008A2E,alpha:1.0) – dwinnbrown