0

以下のコードは Android では適切に動作しますが、iOS では null 例外がスローされます。iOS で最初に選択すると、ページが読み込まれず、最初の選択後にリストで別の項目を選択すると、そのページが読み込まれます。私のコードを以下に示します。

menuPage.Menu.ItemSelected += (sender, e) =>
{
    NavigateTo(e.SelectedItem as Drawer_MenuItem,sender);
};

private void NavigateTo(Drawer_MenuItem menu,Object se)
{
    Page displayPage = (Page)Activator.CreateInstance(menu.TargetType);
    this.Detail = new NavigationPage(displayPage);

    IsPresented = false;

    if (menu != null)
    {
        if (menuPage.Menu.SelectedItem != null)
        {
            ((ListView)se).SelectedItem = null;
        }
    }
}

アップデート :

バグを見つけましたが、解決策はありませんでした。このバグは、カスタム スタック レイアウトとエントリに使用されるカスタム レンダーにあります。カスタム レンダーを削除すると、正常に動作します。それ以外の場合は、同じ問題が発生します。

カスタム レンダリングを使用してこの問題を解決してください。

カスタム レンダリングのコード:

[assembly:ExportRenderer(typeof(Custom_StackLayout),typeof(CustomStackLayoutRenderer))]

namespace LIVI.iOS.Renderers
{
    public class CustomStackLayoutRenderer : VisualElementRenderer<Custom_StackLayout>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Custom_StackLayout> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement.ClassId == "noborder")
            {
                Layer.CornerRadius = 15;
                Layer.BorderColor = Color.FromHex("#e57593").ToCGColor();
                Layer.BorderWidth = 1;
                Layer.MasksToBounds = true;
            }
            else if(e.NewElement.ClassId== "noborderDriverInfo")
            {
                Layer.CornerRadius = 15;
                Layer.MasksToBounds = true;
            }
            else if(e.NewElement.ClassId== "btn_viewProfile")
            {
                Layer.CornerRadius = 15;
                Layer.BorderColor = Color.White.ToCGColor();
                Layer.BorderWidth = 1;
                Layer.MasksToBounds = true;
            }
            else if (e.NewElement.ClassId == "filledStackLayout")
            {

                Layer.CornerRadius = 5;
                Layer.BorderColor = Color.Transparent.ToCGColor();
                Layer.BorderWidth = 0;
                Layer.MasksToBounds = true;
            }
            else if (e.NewElement.ClassId == "imgborder")
            {
                Layer.CornerRadius = 10;
                Layer.BorderWidth = 2;
                Layer.BorderColor = Color.FromHex("#FFC600").ToCGColor();
                Layer.MasksToBounds = true;
            }
            else if (e.NewElement.ClassId == "conDriverMob")
            {
                Layer.CornerRadius = 10;
                Layer.BorderWidth = 2;
                Layer.BorderColor = Color.FromHex("#e9eaeb").ToCGColor();
                Layer.MasksToBounds = true;
            }
            else if (e.NewElement.ClassId == "imgBtn")
            {
                Layer.CornerRadius = 10;
                Layer.BorderWidth = 3;
                Layer.BorderColor = Color.White.ToCGColor();
                Layer.MasksToBounds = true;
            }
            else if (e.NewElement.ClassId == "cellWrapper")
            {
                Layer.CornerRadius = 1;
                Layer.BorderWidth = 2;
                Layer.BorderColor = Color.FromHex("#e9eaeb").ToCGColor();
                Layer.MasksToBounds = true;

            }
            else if (e.NewElement.ClassId == "sqBorder")
            {
                Layer.BorderWidth = 2;
                Layer.BorderColor = Color.FromHex("#e9eaeb").ToCGColor();
                Layer.MasksToBounds = true;
            }
            else
            {
                Layer.CornerRadius = 15;
                Layer.BorderWidth = 2;
                Layer.BorderColor = Color.White.ToCGColor();
                Layer.MasksToBounds = true;

            }
        }
    }
}
4

0 に答える 0