声明命名空间以在xamarin.forms中实现脚本(Iphone X)

时间:2018-02-20 17:43:24

标签: ios xaml xamarin xamarin.forms xamarin.ios

我正试图像这样对iphone X使用效果:

https://xamarinhelp.com/safeareainsets-xamarin-forms-ios/

我的IOS项目中有这个脚本,位于名为Effects

的文件夹中
Function DiagSolv(a() As Variant, b() As Variant, c() As Variant, d() As Variant) As Variant

Dim N As Double

N = 9  

c(1, 1) = c(1, 1) / b(1, 1)

d(1, 1) = d(1, 1) / b(1, 1)

d(N, 1) = (d(N, 1) - a(N, 1) * d(N - 1, 1)) / (b(N, 1) - a(N, 1) * c(N - 1, 1))

Dim temp As Double

For i = 2 To N - 1 Step 1
    temp = b(i, 1) - a(i, 1) * c(i - 1, 1)
    c(i, 1) = c(i, 1) / temp
    d(i, 1) = (d(i, 1) - a(i, 1) * d(i - 1, 1)) / temp
Next i

Dim x(8, 0) As Variant

x(N - 1, 0) = d(N, 1)

For J = N - 1 To 1 Step -1
    x(J - 1, 0) = d(J, 1) - c(J, 1) * x(J, 0)
Next J

DiagSolv = x()

End Function

Sub Solver()

Dim ArrayA() As Variant
ArrayA = Range("AH39:AH47").Value

Dim ArrayB() As Variant
ArrayB = Range("AI39:AI47").Value

Dim ArrayC() As Variant
ArrayC = Range("AJ39:AJ47").Value

Dim ArrayD() As Variant
ArrayD = Range("AK39:AK47").Value

Dim m() As Variant

m() = DiagSolv(ArrayA, ArrayB, ArrayC, ArrayD)

End Sub

在我的xaml中我把它推了出来:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foundation;
using UIKit;
using Xamarin.Forms;
using neoFly_Montana.iOS;
using neoFly_Montana.iOS.Effects;

[assembly: ResolutionGroupName("MyCompany")]
[assembly: ExportEffect(typeof(SafeAreaPaddingEffect), 
nameof(SafeAreaPaddingEffect))]
namespace neoFly_Montana.iOS.Effects
{

public class SafeAreaPaddingEffect : Xamarin.Forms.Platform.iOS.PlatformEffect
{
    Thickness _padding;
    protected override void OnAttached()
    {
        if (Element is Layout element)
        {
            if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
            {
                _padding = element.Padding;
                var insets = UIApplication.SharedApplication.Windows[0].SafeAreaInsets; // Can't use KeyWindow this early
                if (insets.Top > 0) // We have a notch
                {
                    element.Padding = new Thickness(_padding.Left + insets.Left, _padding.Top + insets.Top, _padding.Right + insets.Right, _padding.Bottom);
                    return;
                }
            }
            // Uses a default Padding of 20. Could use an property to modify if you wanted.
            element.Padding = new Thickness(_padding.Left, _padding.Top + 20, _padding.Right, _padding.Bottom);
        }
    }

    protected override void OnDetached()
    {
        if (Element is Layout element)
        {
            element.Padding = _padding;
        }
    }
}
}

错误是:

  

类型效果:在xmlns中找不到SafeAreaPaddingEffect

我在我的pcl项目中创建了这个:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:neoFly_Montana.LayoutScripts"
         x:Class="neoFly_Montana.Views.MenuView"
         Title="Menu"
         xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
         xmlns:fftransformations="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations"            
         NavigationPage.HasNavigationBar="False"                 
         xmlns:effect="clr-namespace:neoFly_Montana.Effects">

<Grid>
    <Image Grid.Column="0" Grid.Row="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Aspect="Fill" Source="menubackground.jpg"/>
    <Grid Grid.Column="0" Grid.Row="0" VerticalOptions="FillAndExpand" RowSpacing="0" HorizontalOptions="FillAndExpand">
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="6*"/>
            <RowDefinition Height="1.5*"/>
            <RowDefinition Height="0.5*"/>
        </Grid.RowDefinitions>

        <!--<Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="6*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>-->

        <!--Top Grid-->
        <Grid Grid.Row="0" HorizontalOptions="FillAndExpand" RowSpacing="0">

            <Image Source="topmenu.png" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Aspect="Fill" Grid.Column="0" Grid.Row="0" />

            <Grid RowSpacing="0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="7*"/>
                    <RowDefinition Height="3*"/>
                </Grid.RowDefinitions>

                <!--sair e user info-->
                <Grid RowSpacing="0" Grid.Row="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                    <Grid.Margin>
                        <OnPlatform x:TypeArguments="Thickness"
                                 iOS="0,20,0,0"/>
                    </Grid.Margin>

                    <!--<Grid.RowDefinitions>
                    <RowDefinition Height="3*"/>
                    <RowDefinition Height="7*"/>
                </Grid.RowDefinitions>-->

                    <!--sair button-->
                    <StackLayout Grid.Row="0" Margin="5,5,0,0" VerticalOptions="StartAndExpand" Orientation="Horizontal" HorizontalOptions="Start">
                        <StackLayout.Effects>
                            <effect:SafeAreaPaddingEffect />
                        </StackLayout.Effects>

填充在Iphone X中不起作用。 请有人帮帮我吗?

1 个答案:

答案 0 :(得分:0)

它在pcl项目中使用它

public class SafeAreaPaddingEffect : RoutingEffect
{
   public SafeAreaPaddingEffect() : base("MyCompany.SafeAreaPaddingEffect")
  {
  }
}