在Swift 2中,我在Storyboard中使用了一個用戶定義的運行時屬性和一個tintColor的鍵路徑來更改標籤欄項目圖標的顏色。但是,它看起來像tintColor已被Swift 3刪除。我如何更改Swift 3中選項卡欄控制器中選項卡欄項目的選定顏色?標籤欄Swift 3中的按鈕顏色?
謝謝!
編輯:附截圖
在Swift 2中,我在Storyboard中使用了一個用戶定義的運行時屬性和一個tintColor的鍵路徑來更改標籤欄項目圖標的顏色。但是,它看起來像tintColor已被Swift 3刪除。我如何更改Swift 3中選項卡欄控制器中選項卡欄項目的選定顏色?標籤欄Swift 3中的按鈕顏色?
謝謝!
編輯:附截圖
使用tabBarItem.setTitleTextAttributes
改變個人物品欄的文本顏色。
self.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red()], for:.selected)
要更改圖標和文本着色顏色在一起的簡單的解決方案是改變的TabBar色調色在每個標籤的viewWillAppear中方法:
viewDidLoad
方法中的每個選項卡的將這個
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.tintColor = UIColor.red()
}
改變圖像色調顏色的另一種解決方案是爲UIImage創建一個擴展,並用它來改變所選圖像自定義色彩:
extension UIImage {
func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.translate(x: 0, y: self.size.height)
context.scale(x: 1.0, y: -1.0)
context.setBlendMode(CGBlendMode.normal)
let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
context.clipToMask(rect, mask: self.cgImage!)
tintColor.setFill()
context.fill(rect)
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
return newImage
}
}
使用此代碼更改所選圖像:
self.tabBarItem.selectedImage = self.tabBarItem.selectedImage?.tabBarImageWithCustomTint(tintColor: UIColor.red())
最新的代碼面值夫特3
extension UIImage {
func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.translateBy(x: 0, y: self.size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.setBlendMode(CGBlendMode.normal)
let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
context.clip(to: rect, mask: self.cgImage!)
tintColor.setFill()
context.fill(rect)
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
return newImage
}
}
在Xcode 8 SWIFT 3試了一下,工作正常。您是否爲標籤欄本身或其中一個欄項目設置了色調顏色? –
感謝您的回覆!我試圖設置單個項目的顏色。我只附加了一個截圖。 – winston