0

首先,我是Swift的新手,所以如果我失去了明顯的東西或使用錯誤的術語道歉。(Swift)標籤欄項目:自定義選擇的圖像與渲染asOriginal不顯示

目標:將選項卡欄項目選定圖像設置爲自定義圖像。

下面的設置工作(所選項目是自定義圖像):

| UITabBarController | => | UIViewController | (設置W /分鏡)

class MyViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let customSelectedImage = UIImage (named: "selected-image")?.withRenderingMode(.alwaysOriginal) 
     self.tabBarItem.selectedImage = customSelectedImage 
    } 
} 

但這種設置不起作用(選擇項有默認藍色色調):

| UITabBarController | => | UINavigationController | => | UIViewController | (設置w /故事板 - see here

與上面類似的代碼,但添加(以編程方式)UICollectionView子視圖到UIViewController。

class MyViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let customSelectedImage = UIImage (named: "selected-image")?.withRenderingMode(.alwaysOriginal) 
     self.tabBarItem.selectedImage = customSelectedImage 
     ... 
     //Some UICollectionView related code 
     ... 
    } 
} 

有些事情可能會有所幫助:

  • 在調試會話(see print screen)=>查看UI層次:所選擇的項目(標記爲類UITabBarSwappableImageView的)具有正確的自定義圖像,但色調默認爲藍色。我嘗試了不同的自定義圖像,看起來好像他們被另一個(默認值?)視圖隱藏...
  • 如果我更改AppDelegate.swift應用程序中的UITabBar.appearance()。tintColor = UIColor.red(.. 。didFinishLaunchingWithOptions ...)函數,然後所選項目具有紅色(vs藍色)色調。

發生了什麼事?

回答

0

我延伸的UITabBarController:

extension UITabBarController { 

    func updateTabBarItem(tab: Int, image: UIImage?) { 

     guard let tabItems = tabBar.items, tab < tabItems.count && tab >= 0 
      else { return } 

     let tabItem = tabItems[tab] 
     tabItem.image = image?.withRenderingMode(.alwaysOriginal) 
     tabItem.selectedImage = tabItem.image 

    } 

} 

這將有助於訪問tabBar.items不加載任何視圖控制器(除了標籤0的第一視圖控制器)。

class MyViewController: UIViewController { 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     tabBarController?.updateTabBarItem(tab: 1, image: UIImage(named: "selected-image")) // update the second tab's image here (just for example) 
    } 

} 

例如,如果要更改選項卡2選擇的圖像,使一個破發點上viewDidLoad中:第二個視圖控制器上,你會發現斷點未命中,這就是爲什麼標籤項圖像不會被更新。