我创建了一个Xamarin Forms应用程序。 在一个名为" MyLabel"的标签的新页面中。 在我的页面背后的代码我有
private void SetUpUI()
{
#if __IOS__
this.MyLabel.BackgroundColor = Color.Navy;
#endif
}
在我的iOS项目选项中,我可以在"编译器"中找到符号__IOS__
。标签。 (请看截图)
当我在iOS中运行时,它不会使标签变为蓝色:
但如果我删除#if __IOS__
阻止,则会将标签设为蓝色:
所以似乎条件编译不起作用。 我在Mac上。因此无法在Visual Studio上进行测试。 坚持了很长时间,但无法弄清楚我错过了什么。
答案 0 :(得分:3)
SushiHangover的答案是正确的:您的 PCL项目将没有平台的编译器定义。
但是,自从Xamarin Forms 2.3.4发布以来,他提供的解决方案已经过时了。 Device.OnPlatform已按this discussion中所述进行了重新设计,并在this Pull Request中实施。
在Xamarin Forms 2.3.4及更高版本中执行此操作的正确方法是使用if let data = try? Data(contentsOf: fileURL) {
let json = JSON(data: data)
}
。使用开关或条件符合您的需求,如下:
Device.RuntimePlatform
如果你使用共享项目而不是PCL,就可以像你问的那样去做。因为当您使用共享项目时,您可以访问平台项目的编译器指令。
答案 1 :(得分:2)
您正在 PCL项目中使用不包含这些编译器定义的条件,因此您的条件代码灰色的原因。
在您的PCL项目中,您可以使用Device.OnPlatform
执行基于平台的处理:
Device.OnPlatform (iOS: () => this.MyLabel.BackgroundColor = Color.Navy; );
re:https://developer.xamarin.com/api/member/Xamarin.Forms.Device.OnPlatform/