2015-06-26 341 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