以下のコードは 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;
}
}
}
}