I want to use SVG images as icons on a TabbedPage
in Xamarin.Forms for iOS.
The documentation for the TabbedPage
class provides the following tip:
The
TabbedRenderer
for iOS has an overridableGetIcon
method that can be used to load tab icons from a specified source. This override makes it possible to use SVG images as icons on aTabbedPage
. In addition, selected and unselected versions of an icon can be provided.
I created the following class to perform the override:
[assembly: ExportRenderer(typeof(TabsRoot), typeof(TabbedPageCustomRenderer))]
namespace MyProject.iOS.Renderers
{
public class TabbedPageCustomRenderer : TabbedRenderer
{
protected override Task<Tuple<UIImage, UIImage>> GetIcon(Page page)
{
var image = UIImage.FromFile(@"home-black-18dp.svg");
return Task.FromResult(new Tuple<UIImage, UIImage>(image, image));
}
}
}
The accepted answer in this thread recommends creating a UIImage
from an SVG file by doing something like this: var myImage = UIImage.FromFile(<<file name>>)
where <<filename>>
is an SVG. This other thread contradicts the previous thread, saying that UIImages
cannot be made from SVG files. Sure enough, when I provide an SVG file, UIImage.FromFile()
returns null
and no icon is shown at all, just as the latter thread predicted. When I provide a PNG file, the override works as expected.
Another way I've tried to square this circle is to use the SvgCachedImage
provided by FFImageLoading.Svg.Forms
, but I haven't figured out how to 'wrap' a UIImage
around an SvgCachedImage
or whether that is even appropriate in this case.
Thank you for your help!