2017-12-13 19 views
-2

애셋 카탈로그에 설정된 이미지의 "렌더링 방식"이 "템플릿 이미지"로 설정되어 있어도 내 탭 막대의 아이콘에 흰색 배경이 나타납니다. 다음은 몇 가지 사례는 다음과 같습니다iOS 시뮬레이터는 템플릿 렌더링 모드로 투명한 이미지에 흰색 배경을 표시합니다.

에 모든 설정 없음 추진 배경 UITabBar

With no background setting

같은 이미지를 어둡게하고 대비

With no background setting, image enhanced

같은 아이콘 뒤의 배경을 가지고 변경 이미지를 사용하지만 빨간색 배경을 사용하는 경우 UITabBar.appearance().barTintColor = red

enter image description here

여기에 아이폰 OS 설정과 3 개 크기의 수출 스케치의 아이폰 OS UI 라이브러리에서 새로 수출 형태는 다음과 같습니다

With a green background

내가

The final png

을 사용하는 최종 PNG

Pixelmator에서 볼 때의 투명도를 나타내는 PNG

A screenshot of the icon in Pixelmator

이미지는 자산 카탈로그에서 프로그래밍 방식으로 템플릿 모드로 설정됩니다. 각 배경 UITabBarappearance()로 설정하고 나는 UITabBarController 서브 클래스 아니에요, 나는 스토리 보드를 사용하지 않는, 그리고 여기에 내가 단순화 var에 이름이 문제를 재현 할 수있는 모든 코드입니다 : 여기

// AppDelegate 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    window = UIWindow(frame: UIScreen.main.bounds) 
    let tabBarController = UITabBarController() 
    // let controllers = [...] 
    tabBarController.setViewControllers(controllers, animated: false) 
    UITabBar.appearance().tintColor = UIColor.brown 
    UITabBar.appearance().barTintColor = // red, green, etc 
    window!.rootViewController = tabBarController 
    window!.makeKeyAndVisible() 
    return true 
} 

과 내가 그 컨트롤러의 UITabBarItem 설정 여기서 이러한 코드 몇 줄에서 제외

// The controller with the tab icon 
override init(style: UITableViewStyle) { 
    super.init(style: style)   
    let booImage = UIImage(named: "boo")?.withRenderingMode(.alwaysTemplate) 
    self.tabBarItem = UITabBarItem(title: "Controller", image: booImage, tag: 1) 
} 

을, 이것은 다른 변화와 새로운 프로젝트입니다. 모양을 원하는 색으로 채울 수 있기 때문에 이미지가 템플릿이라는 것을 알 수 있습니다. 그러나 흰색 배경이 항상 남아 있습니다.

문서화에 따르면 템플릿 이미지를 UITabBarItem 아이콘으로 사용하는 데 필요한 다른 단계는 없습니다. 누구나 UITabBarItems에 흰색 배경이 나타나는 이유는 누구나 알 수 있습니까? 시뮬레이터에서 실행된다는 사실과 관련이 있습니까?

+0

는 (내 대답은 아래를 참조) 복제 할 수 없습니다. 간단한 데모 프로젝트를 어딘가에 게시하고 싶다면 다운로드하고 기꺼이 살펴 보겠습니다. – matt

+0

알았어, 미안해! 다시는하지 않겠습니다. 편집 : 전에는 그 일을 기억하지 않지만, 배운 교훈은 – bpercevic

+0

괜찮습니다. 우리가 포럼이 아니라는 것을 기억하십시오. "범프"하거나 "해결 된"또는 유사한 것을 추가하지 마십시오. 감사. ;) – Moritz

답변

1

재현 할 수 없습니다.다음은 5s 시뮬레이터에서 실행되는 내 앱입니다 (가로 방향). 더 "흰색 배경은"없다 :

enter image description here

여기 코드의 전체입니다 :

// AppDelegate.swift 

import UIKit 
@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions 
     launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
      self.window = self.window ?? UIWindow() 
      let tabBarController = UITabBarController() 
      let controllers = [ViewController()] 
      tabBarController.setViewControllers(controllers, animated: false) 
      UITabBar.appearance().tintColor = .yellow 
      UITabBar.appearance().barTintColor = .red 
      self.window!.rootViewController = tabBarController 
      self.window!.makeKeyAndVisible() 
      return true 
    } 
} 

// ViewController.swift 

import UIKit 
class ViewController: UIViewController { 
    init() { 
     super.init(nibName: nil, bundle: nil) 
     let booImage = UIImage(named: "ghost")?.withRenderingMode(.alwaysTemplate) 
     self.tabBarItem = UITabBarItem(title: "Controller", image: booImage, tag: 1) 
     self.view.backgroundColor = .white 
    } 
    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
+0

Thanks Matt. 나는 새로운 프로젝트로 같은 것을 시도했고 이미지는 예상대로 백그라운드없이 나타납니다. 그래서 나는 정말로 어떤 일이 일어나고 있는지 이해하지 못한다. 그러나 나는이 프로젝트를 포기하고 신선한 것을 시작해야 할 수도 있다고 생각한다. 그것을 확인해 주셔서 감사합니다 – bpercevic

+0

나의 이론은 당신이 사용하고 있다고 생각하는 이미지 또는 당신이 생각하는 코드 등이 실제로 사용/실행되는 것이 아닙니다. 제가 말했듯이, 당신이 무의미한 것을 제거 할 수 있다면 프로젝트를 보게되어 기쁩니다. – matt

+0

매트 나는 그것을 이해했다. GitHub의 일부 버튼 콜렉션 repo에서 사용자 정의 UIButton으로 신속한 파일을 가지고 있습니다. 제거한 후에는 예상대로 작동합니다. 이 파일은 UIButton의 동작을 변경하지 않았으므로 의심의 여지가 없습니다. UIButton을 서브 클래 싱하는 것뿐이었습니다. 나를 위해 시간을내어 주셔서 감사합니다 – bpercevic

0

UITabBar는 background = white 일 가능성이 큽니다. 탭 표시 줄의 배경을 지우도록 설정하십시오. 스토리 보드에서이 작업을 수행 할 수 있습니다. 또한 기본 UITabBar를 확장하여 코드에서 업데이트하려는 몇 가지 이유가 있습니다.

Storyboard Color

+0

사실, 나는 그 질문에 대해 다시 한마디했다. 내 문제는 UITabBarItem의 이미지가 완전히 투명 한 png이지만 투명하지 않다는 것입니다. – bpercevic