VS Mac下Xamarin.iOS用UIImage.FromFile加载图片返回null怎么办
Xamarin.iOS 中 UIImage.FromFile 读取图片返回空值的修复方案
首先先修正你贴出代码里的基础语法错误:存在字符串未闭合、多余大括号的问题,修正后的可运行基础代码如下:
public UIImage getImage(string name) { UIImage image = UIImage.FromFile("Images/blt.png"); if (image == null) { Console.WriteLine("Image IS Null"); } return image; }
按照以下优先级排查问题,99%的同类场景都能解决:
- 第一步检查资源生成配置(最高发诱因)
右键点击解决方案资源管理器中的blt.png文件打开属性面板,将生成操作修改为BundleResource,同时将「复制到输出目录」设置为「如果较新则复制」。注意不要把生成操作设为Content、None或者EmbeddedResource,这三类配置都不会把图片打包进iOS应用的Bundle目录,运行时自然找不到文件。如果你的Images文件夹是VS里手动创建的虚拟文件夹(不是磁盘上的实体目录),要手动把图片文件放到磁盘对应的项目路径下,不要只在解决方案视图里拖入文件。 - 第二步修正路径写法问题
- 不要用Mac本地的绝对路径测试:iOS应用运行在独立沙盒中,你开发机上的本地绝对路径在沙盒环境内完全不可访问,读不到是必然结果。
- 严格匹配文件名大小写:iOS的文件系统是大小写敏感的,如果你的文件实际命名是
BLT.png/Blt.png,代码里写blt.png一定会返回空值,必须和磁盘上的文件名完全一致。 - 如果你是把图片存放在
Assets.xcassets资源目录中,不要用FromFile方法读取,直接调用UIImage.FromBundle("blt")即可,不需要写路径、也不需要加.png后缀,系统会自动匹配对应分辨率的@2x/@3x切片,加载性能比FromFile更高,是iOS开发加载图片的优先推荐方案。
- 第三步清理编译缓存
修改完上述配置后,先执行「生成-清理解决方案」,手动删除模拟器/真机上已经安装的旧版本应用,再重新编译部署,避免旧的编译缓存没有把新加入的图片打包进安装包。
内容的提问来源于stack exchange,提问作者texasRanger
相关产品推荐
相关产品推荐

