如何将图片添加到Xamarin iOS项目并在Interface Builder中使用?

12
我正在使用Xamarin构建一个iOS iPad应用程序,我在项目根目录下创建了一个名为"Resources"的文件夹,例如:ProjectName/Resources。在其中有一个子文件夹ProjectName/Resources/Images,我已经在Images文件夹中添加了两张图片。
之后,在Interface Builder(在Xcode中),我向xib文件中添加了一个UIImageView,然后在属性检查器中的Image下拉菜单中找不到可供选择的图片。
也许我需要通过Xcode添加它们?如果是这样,正确的步骤和文件结构是什么?
正确的方法是什么,可以与图像一起使用,并使它们可以在Interface Builder中进行选择?
1个回答

12
Xamarin Studio只导出应用程序编译后位于顶级应用程序包目录中的图像。这是因为Xcode的.xib文件似乎只能引用顶级应用程序包中的图像。
有多种实现目标的方法:
第一种选择是将“LogicalName”指定为编译后应用程序包内想要的名称。在Xamarin Studio中,此属性称为“Resource ID”(根据使用的Xamarin Studio版本可能可用或不可用 - 仅最近添加)。也可以通过编辑*.csproj文件来设置LogicalName,方法如下:
<BundleResource Include="Icons\icon.png">
  <LogicalName>icon.png</LogicalName>
</BundleResource>

通常情况下,Icons\icon.png 这个文件将会被复制到 iOS 应用束(app bundle)中作为 Icons/icon.png,但是 LogicalName 属性会覆盖安装路径/名称的相对位置。在这种情况下,它将会被简单地复制为 icon.png

另一个例子如下:

<BundleResource Include="Icons\iOS\icon.png">
  <LogicalName>AppIcon.png</LogicalName>
</BundleResource>

这将把 Icons\iOS\icon.png 文件复制到 iOS 应用包的根目录,并将其重命名为 AppIcon.png
第二个选项是将图像文件移动到 Resources 文件夹中。资源文件夹是一个特殊的目录,当被复制到 iOS 应用程序包时,会从默认路径名中删除。换句话说,Resources\icon.png 将作为 icon.png 被复制到 iOS 应用程序包的根目录中,而不是像普通项目目录一样作为 Resources\icon.png
第三个选项是简单地注册其他自己的“Resource”目录(它们可以存在于其他目录中,包括默认的 Resources 目录)。
例如,您可以在项目中使用以下结构:
Resources/
   Icons/
      icon.png
      icon@2x.png

在您的*.csproj文件中,编辑以下标签:

<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>

并将其替换为:

<IPhoneResourcePrefix>Resources;Resources\Icons</IPhoneResourcePrefix>

这将确保 icon.png 和 icon@2x.png 文件被安装在 iOS 应用程序包的根目录中。

目前我正在使用您的第二个选项。不过第三个选项听起来更好。如果我想在“Resource”文件夹中有多个子文件夹怎么办?例如: Resources/ Icons/ icon.png icon@2x.png AND Resources/ Content/ feature.png feature@2x.png。我需要将以下内容添加到.csproj文件中吗? <IPhoneResourcePrefix>Resources;Resources/Icons;Resources/Content</IPhoneResourcePrefix> - Dave Haigh
是的,您可以拥有任意数量的资源目录。 - jstedfast
如果您接受我的答案,那可能会帮助其他有类似问题的用户找到这个答案。谢谢! - jstedfast
现在唯一的方法是打开*.csproj文件并在文本编辑器中进行编辑。 - jstedfast
选项2效果不错,但我认为选项3是更好的解决方案。遗憾的是,选项3对我来说无法工作。尽管清理并重新启动了Xamarin和Xcode。使用Xamarin 4.2.2。 - schmidiii
1
抱歉...这个问题已经在git主分支中修复了,将会在4.2.3版本中发布。 - jstedfast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接