【问题标题】:Conditional Compilation seems to be not working in Xamarin Studio条件编译似乎在 Xamarin Studio 中不起作用
【发布时间】:2017-04-26 15:22:02
【问题描述】:

我创建了一个 Xamarin Forms 应用程序。 在一个带有名为“MyLabel”的标签的新页面内。 在我的页面后面的代码中,我有

private void SetUpUI()
{
    #if __IOS__
    this.MyLabel.BackgroundColor = Color.Navy;
    #endif
}

在我的 iOS 项目选项中,我可以在“编译器”选项卡中看到符号 __IOS__。 (请看截图)

当我在 iOS 中运行时,它不会使标签变为蓝色:

但如果我删除 #if __IOS__ 块,它会使标签变为蓝色:

所以看来条件编译不起作用。 我在 Mac 上。所以无法在 Visual Studio 上进行测试。 坚持了很长时间,但无法弄清楚我错过了什么。

【问题讨论】:

    标签: xamarin xamarin.ios xamarin.forms conditional-compilation


    【解决方案1】:

    SushiHangover 的答案是正确的:您的 PCL 项目 不会有平台的编译器定义。

    但是,自 Xamarin Forms 2.3.4 发布以来,他提供的解决方案已经过时。 Device.OnPlatform 已按照this discussion 中的讨论进行了重新设计,并在this Pull Request 中实现。

    在 Xamarin Forms 2.3.4 及更高版本中执行此操作的正确方法是使用 Device.RuntimePlatform。使用开关或条件来满足您的需求,如下所示:

    if(Device.RuntimePlatform == Device.iOS)
    {
        // iOS
    }
    else if(Device.RuntimePlatform == Device.Android)
    {
        // Android
    }
    

    如果您要使用共享项目而不是 PCL,则可以按照您的要求进行操作。因为当您使用共享项目时,您可以访问平台项目的编译器指令。

    【讨论】:

      【解决方案2】:

      您在 PCL 项目 中使用了不包含那些编译器定义的条件,因此您的条件代码变灰了。

      在您的 PCL 项目中,您可以使用 Device.OnPlatform 执行基于平台的处理:

      Device.OnPlatform (iOS: () => this.MyLabel.BackgroundColor = Color.Navy; );
      

      回复:https://developer.xamarin.com/api/member/Xamarin.Forms.Device.OnPlatform/

      【讨论】:

      • 如果您使用的是之前 v2.3.4 版本的 Xamarin Forms 版本,这是要走的路。否则,请使用我在回答中所述的Device.RuntimePlatform
      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多