ios - 如何从 XAML 引用具有不同文件扩展名的图像?
问题描述
我们开发了一个 Xamarin.Forms UI 库,其中图像存储为 Android 的 PNG 和 iOS 的 PDF。对于 Android,图像位于 Resources 文件夹中,对于 iOS,图像位于资产目录中。iOS 和 Android 之间每个图像的文件名相同,但文件扩展名不同。
使用检查 Assets.carxcrun --sdk iphoneos assetutil --info Assets.car
显示图像存储为 PDF,并且在构建时未转换为 PNG。
...
{
"AssetType" : "Image",
"BitsPerComponent" : 8,
"ColorModel" : "RGB",
"Colorspace" : "srgb",
"Compression" : "deepmap2",
"Encoding" : "ARGB",
"Image Type" : "kCoreThemeOnePartScale",
"Name" : "ic_cup_coffee",
"NameIdentifier" : 54350,
"Opaque" : false,
"PixelHeight" : 24,
"PixelWidth" : 24,
"RenditionName" : "ic_cup_coffee.pdf",
"Scale" : 1,
"SHA1Digest" : "0999A4B02703DF4A5FC84AF67FEF220E560F79DD",
"SizeOnDisk" : 334,
"Template Mode" : "automatic"
}
...
为了从 XAML 中引用图像,我们有一个帮助类,它将类字段映射到文件名(不包括文件扩展名):
public static class Images
{
public static readonly string Ic_cup_coffee = "ic_cup_coffee"; // value equals file name
...
}
在 XAML 中,我们使用 x:Static 标记扩展:
<Image Source="{x:Static images:Images.Ic_cup_coffee}" />
我们使用这种方法遇到的问题是,有时图像不会显示在将 Xamarin.Forms UI 库集成为 NuGet 包的 iOS 应用程序中。在 Android 上,我们不会遇到任何问题。
该文档说明了如何跨不同平台使用单个图像文件,但没有说明如何处理用于同一图像源的具有不同文件扩展名的文件。
如何正确引用具有不同文件扩展名的 XAML 图像?我们参考图像的方法是否有效?
解决方案
可以从 XAML 引用具有不同文件扩展名的图像,如下所示:
<Image>
<Image.Source>
<OnPlatform x:TypeArguments="ImageSource">
<OnPlatform.iOS><FileImageSource File="ic_cup_coffee.pdf"/></OnPlatform.iOS>
<OnPlatform.Android><FileImageSource File="ic_cup_coffee.png"/></OnPlatform.Android>
</OnPlatform>
</Image.Source>
</Image>
无论如何,这并不能解决我们的图像有时不可见的问题。我们坚持使用<Image Source="ic_cup_coffee"/>
,我们将分析这个错误是否是问题的根源。
推荐阅读
- reactjs - React Native 中的 Const = () => vs Class Functions function name() {}
- python - Python中的整数与浮点乘法
- django - 在 django 查询集中加入来自同一模型的两条记录
- angular - Angular 9:文件替换不起作用
- css - 为什么 CSS 属性选择器后跟元素标签比较慢?
- reactjs - 隐藏列表项目符号反应 CSS
- batch-file - 调用 VBScript 时在批处理脚本中设置参数
- image-processing - 语义分割:如何评估噪声对医学图像分割的有效性和鲁棒性的影响?
- python - 已知 ODE 的 Lyapunov 谱 - Python 3
- c# - UserManager 错误“在前一个操作完成之前在此上下文上启动了第二个操作”