【发布时间】:2017-10-20 18:25:39
【问题描述】:
想为Xamarin.iOS 应用程序实现侧边菜单,但在控制台中收到警告:
mvx:Warning: 0.25 未找到侧边菜单。使用侧边菜单装饰 具有“MvxPanelPresentationAttribute”类的视图控制器类 并将面板设置为“左”或“右”。
步骤
1) 为菜单创建基类(来自sample)
public class BaseMenuViewController<T> : MvxViewController<T>, IMvxSidebarMenu where T : class, IMvxViewModel
{
public virtual UIImage MenuButtonImage => UIImage.FromBundle("burger");
public virtual bool AnimateMenu => true;
public virtual float DarkOverlayAlpha => 0;
public virtual bool HasDarkOverlay => false;
public virtual bool HasShadowing => true;
public virtual bool DisablePanGesture => false;
public virtual bool ReopenOnRotate => true;
private int MaxMenuWidth = 300;
private int MinSpaceRightOfTheMenu = 55;
public int MenuWidth => UserInterfaceIdiomIsPhone ?
int.Parse(UIScreen.MainScreen.Bounds.Width.ToString()) - MinSpaceRightOfTheMenu : MaxMenuWidth;
private bool UserInterfaceIdiomIsPhone
{
get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone; }
}
public virtual void MenuWillOpen()
{
}
public virtual void MenuDidOpen()
{
}
public virtual void MenuWillClose()
{
}
public virtual void MenuDidClose()
{
}
}
2) 实现 VisibleView(第一个可见的)
[MvxSidebarPresentation(MvxPanelEnum.Center, MvxPanelHintType.ResetRoot, true)]
public partial class ContentViewController : MvxViewController<ContentViewModel>
{
public ContentViewController()
: base("ContentViewController", null)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
View.BackgroundColor = UIColor.Purple;
this.ViewModel.Show<MenuViewModel>();
}
}
3) 实现 MenuElementViewController (SideMenu)
[Register("MenuViewController")]
[MvxSidebarPresentation(MvxPanelEnum.Left, MvxPanelHintType.PushPanel, false)]
public class MenuViewController : BaseMenuViewController<MenuViewModel>
{
public override void ViewDidLoad()
{
base.ViewDidLoad();
this.View.BackgroundColor = UIColor.Red;
}
}
4) 在设置中为 SideMenu 添加演示者
protected override IMvxIosViewPresenter CreatePresenter()
{
return new MvxSidebarPresenter((MvxApplicationDelegate)ApplicationDelegate, Window);
}
预期行为
应该从点 1 看到带有汉堡按钮的控制器
实际行为
从 point1 开始的控制器变得可见但没有汉堡按钮, 来自 point2 的控制器未初始化, 控制台中关于错过课堂装饰的警告,但正如您所见,它们存在(也已弃用警告并需要更新 - check source code - searching done for correct type, but warning has old message)
配置
MvvmCross v 5.0.6
- MvvmCross
- MvvmCross.Core
- MvvmCross.Binding
- MvvmCross.iOS.Support
- MvvmCross.iOS.Support.XamarinSidebar
- MvvmCross.Platform
- 侧边栏导航
在查找错误时还看到了this post - 重新检查,看起来一切正常,但不起作用。
警告日志:
mvx:Diagnostic: 0.21 Setup: Secondary end
mvx:Diagnostic: 0.21 显示 ViewModel ContentViewModel iOSNavigation:诊断:0.21 导航请求
mvx:Warning: 0.23 未找到侧边菜单。要使用侧边菜单,请使用“MvxPanelPresentationAttribute”类装饰视图控制器类,并将面板设置为“左”或“右”。
我还希望在调用this.ViewModel.Show<MenuViewModel>(); 时看到ViewDidload 的断点停止在MenuViewController 但它从未被触发,在创建此控制器的同一时刻模型。
有人可以建议做错了什么吗?
编辑
我能够设置 new empty project with sidebar 并且它按预期工作。但是相同的代码在我当前的项目中不起作用 - 我不知道为什么装饰属性没有按预期读取....
【问题讨论】:
标签: c# iphone xamarin.ios mvvmcross