Reputation: 1803
In Swift 3, when I try to programmatically change the color of an image loaded from assets just like this:
let imageView = UIImageView()
let image = UIImage(named: "imageFromAssets")?.withRenderingMode(.alwaysTemplate)
imageView.contentMode = .scaleAspectFit
imageView.tintColor = GREEN_UICOLOR // Change to custom green color
imageView.image = image
The image shows up as a square block below:
However, the funny thing is this does not always happen. With some other images in the assets, it works and changes the tint to green:
Why is there inconsistent behavior here? And in general how do I add a template image to assets, and be able to programmatically change its color? I realize when I do not change the image to a template image it works, but I can't do that because I want to change the image's tint.
Upvotes: 25
Views: 23477
Reputation: 77631
Template images work by using the opacity property of an image.
If you have an image with a transparent background then the transparent background remains transparent and ALL the rest of the image is changed to the tiny colour.
If your image does not have a transparent background. Say it has a white background. Then the entire image will be changed to the tint colour (like you are seeing in your example).
To fix this you need to give that image a transparent background.
It's also worth noting that you don't need that code. If you are using an image only in template mode then just select the rendering mode in the asset catalog.
Upvotes: 23
Reputation: 8563
For template images the background needs to be transparent - not white.
Upvotes: 40